2014-02-10 4 views
6

Я пытаюсь расширить поле «один ко многим» в моем приложении Flask-Admin, чтобы использовать пользовательское поле Select2. Javascript код поля выглядит примерно так:Flask-Admin Custom Select2 Ajax Field

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) 

, но его не АЯКС и есть ошибка при попытке разобрать список.

Я чувствую, что я рядом, но мне нужно руководствоваться, чтобы получить помощь, спасибо за помощь.

ответ

-1

, что вы, вероятно, нужно это лямбда

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

Это даже не синтаксически правильно. 'for x in lambda' пытается перебрать функцию, которая никогда не оценивалась. –