2014-02-10 46 views
6

我想在我的Flask-Admin應用程序中擴展一對多字段以使用自定義的Select2字段。該字段的JavaScript代碼看起來像這樣:Flask-Admin自定義Select2 Ajax字段

function format(data) { 
    if (!data.id) return data.text; // optgroup 
    return "<img class='flag' src='" + data.text + "'/>" + data.id; 
}  
function formatSelection(data) { 
    return data.id; 
} 
$("#da2").select2({ 
    maximumSelectionSize: 3, 
    formatResult: format, 
    formatSelection: formatSelection, 
    escapeMarkup: function(m) { return m; } 
}); 

我不確定我需要更改我的視圖代碼。我試過這樣的事情:

class PostForm(wtf.Form): 
    title = fields.TextField('Title') 
    photos = fields.SelectField('Photo', widget=widgets.Select(multiple=True), id='da2') 

class PostView(ModelView): 
    form = PostForm 

def _feed_user_choices(self, mform): 
     photos = Photo.query.all() 
     mform.photos.choices = [(x.path, url_for('static', 
               filename=form.thumbgen_filename(x.path))) for x in photos] 
     return mform 

def create_form(self): 
    form = super(Post2View, self).create_form() 
    return self._feed_user_choices(form) 

但它不是ajax,並且在嘗試解析列表時出現錯誤。

我覺得我很接近,但需要一些指導去那裏,謝謝你的幫助。

回答

-1

你可能需要的是一個lambda

def _feed_user_choices(self, mform): 
    mform.photos.choices = [(x.path, url_for('static',filename=form.thumbgen_filename(x.path))) for x in lambda: Photo.query.all()] 
    return mform 
+2

這甚至不是語法正確。 'lambda'中的x正試圖迭代一個永遠不會被評估的函數。 –