Nun, ich habe vor kurzem an flask-admin herangetreten und kann nicht herausfinden, wie ich dieses Problem lösen kann. Ich weiß, dass ich form_choices
verwenden kann, um die möglichen Werte für ein Textfeld durch Angabe einer Liste von Tupeln zu beschränken. Wie auch immer, form_choices
erlaubt nur jeweils einen Wert auszuwählen. Wie kann ich festlegen, dass ich in manchen Fällen eine durch Kommas getrennte Liste von Werten benötige?Mehrere Auswahlmöglichkeiten in flask-admin form_choices
ich diese Abhilfe versucht:
form_args = {
'FIELD': {
'render_kw': {"multiple": "multiple"},
}
}
aber, obwohl eine Mehrfachauswahl Eingang erscheint tatsächlich auf der Webseite, wird nur der erste Wert gespeichert.
EIDT 05/13/2017
Durch ein wenig mit Kolben-admin Spielen fand ich zwei mögliche (Teil-) Lösung für meine Frage, die beide mit spezifischen Nachteilen.
1) Der erste befasst sich mit der Verwendung von Select2TagsField
from flask_admin.form.fields import Select2TagsField
...
form_extra_fields = {
'muri': Select2TagsField()
}
Mit dieser Methode ist es möglich, einfach für den normalen Texteingabe wählen Sie die Menü zu implementieren, obwohl derzeit Ich verstehe nicht, wie Entscheidungen zu übergeben Select2TagsField. Es funktioniert gut als eine Art multiple freie Texteingabe. Soweit ich verstehe, ist es jedoch nicht möglich, Select2TagsField und form_choices
2) Die zweite ist ein bisschen länger, aber es bietet mehr Kontrolle über Code (zumindest vermute ich). Noch es die Verwendung von form_choices
impliziert, aber diesmal gepaart mit on_model_change
form_args = {
'FIELD': {
'render_kw': {"multiple": "multiple"},
}
}
form_choices = {'FIELD': [
('1', 'M1'), ('2', 'M2'), ('3', 'M3'), ('4', 'M4')
]}
...
def on_model_change(self, form, model, is_created):
if len(form.FIELD.raw_data) > 1:
model.FIELD = ','.join(form.FIELD.raw_data)
Diese Lösung trotz der ersteren ermöglicht Entscheidungen abzubilden und funktioniert gut, wenn Daten an das Modell hinzufügen, aber es hat einige in der Bearbeitung gibt Probleme. Jedes Mal, wenn ich den Bearbeitungsdialog öffne, ist das FELD leer. Wenn ich mir die Daten ansehe (mit on_form_prefill
durch Drucken form.FIELD.data
) bekomme ich eine Komma-getrennte Zeichenfolge im Terminal, aber nichts erscheint im entsprechenden Auswahlfeld auf der Webseite.
dank MrLeeh Modelview für Sie tun (die richtige Antwort, nein Zweifel). Ich weiß, dass der vorgeschlagene Ansatz in der Tat nicht sehr orthodox ist, aber da in meinem Modell viele Fälle wie der oben erwähnte vorkommen (Fälle, die sehr selten verwendet werden müssen), habe ich mich gefragt, ob es einige Methoden gibt, dieselben zu erben Verhalten einer N: M-Beziehung ohne Alternieren des Modells. Ich dachte an eine durch Komma getrennte String-Liste, aber ich weiß nicht, wie ich dies mit Flask-Admin angeben soll – Pankus