2014-03-03 1 views
5

Ich versuche, Flask-Admin zu verwenden, das scheint groß und einfach, aber ich habe ein Problem.Warum benötigt Flask-Admin ein ListField von Mongoengine um einen Feldtyp zu haben?

Ich habe ein Feld in einer Sammlung, die als ListField() definiert ist, mit einem impliziten Typ von None für den Listenfeldtyp. Der Grund, warum ich keinen Typ für das Feld definiere, ist, weil ich eine Liste von Listen führe, und es gibt keinen anderen eleganten Weg (den ich gefunden habe), dies mit Mongoengine zu erreichen.

Aber Flask-Admin lässt mich nicht ein solches Feld mit einem Fehler von ListField "movements" must have field specified for model definieren.

Gibt es einen Weg um dies?

+0

Gibt es eine Chance, dass du etwas von deinem Code einfügen und uns die Version anzeigen kannst, die du auf mongoengine verwendest? – AlexLordThorsen

+0

Was ist mit einem db.ListField (field = db.ListField()) –

Antwort

1

Der Grund, warum flask admin ein bestimmtes Feld benötigt, liegt daran, dass das Formular-Rendering sonst nicht weiß, welche Art von Eingabe dafür angezeigt werden soll.

Zum Beispiel, wenn es ein Auswahlfeld, Datumsfeld oder ein anderes Listenfeld selbst ist!

Sie so etwas tun könnte:

my_field = db.ListField(field=db.ListField(field=db.StringField())) 

Der innerste Bereich kann alles sein, ein EmbeddedDocumentField oder IntField einschließlich usw.

Auch, wenn Sie das Feld mit ListField fortsetzen möchten ohne Angabe Geben Sie an, dass Sie flask-admin auch dazu auffordern können, dies als Zeichenfolge zu behandeln, indem Sie die ModelView überschreiben. Dann erhalten Sie nur ein Textfeld mit der Zeichenfolge:

[ 'a value', 42, { 'A':'B' } ] 

Damit bleibt die Flexibilität erhalten, aber die Struktur wird reduziert und die Validierung wird schlecht.

+0

Das Überschreiben der ModelView (... 'form_overrides = {'Bewegungen': StringField}' ...) ist eine gute Lösung – zm0