2014-02-10 1 views
6

Ich versuche, ein Eins-zu-viele-Feld in meiner Flask-Admin-App zu erweitern, um ein benutzerdefiniertes Select2-Feld zu verwenden. Der Javascript-Code für das Feld sieht etwa so aus:Flask-Admin Benutzerdefiniertes Select2 Ajax Feld

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; } 
}); 

Ich bin nicht sicher, was ich brauche in meiner Ansicht Code zu ändern. Ich habe so etwas wie dies versucht:

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) 

aber es ist nicht Ajax und es ist ein Fehler, wenn sie versuchen, die Liste zu analysieren.

Ich fühle, dass ich in der Nähe bin, aber brauche eine Anleitung, um dorthin zu kommen, danke für die Hilfe.

Antwort

-1

, was Sie wahrscheinlich benötigen, ist ein 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

Dies ist nicht einmal syntaktisch korrekt. 'für x in Lambda' versucht, über eine Funktion zu iterieren, die nie ausgewertet wird. –