Ich versuche Flask-Admin zu verwenden, um ein Erstellungs-/Bearbeitungsformular für das unten gezeigte Modell Matriline zu erstellen. Dieses Modell hat einen String-Feld Namen und ein Feld pod_id mit einem Fremdschlüssel zu einem anderen Modell Pod, die sie ein Fremdschlüsselfeld zu einem Clan Modell haben.Benutzerdefiniertes Flask-Admin-Formular mit einigen Auswahlfeld-Einstellungen gemäß einem anderen Auswahlfeld
Das Formular standardmäßig erstellt von Flask-Admin zeigt den Namen Feld und ein Auswahlfeld für die Pod Instanzen, aber ich möchte ein Feld Clan, hinzuzufügen, die die Pod Liste zurücksetzen würde nach zum Clan Instanz ausgewählt.
Um das Clan Feld mir den Standard-Modelview für Matriline und fügen ein zusätzliches Auswahlfeld Clan mit allen Clan Instanzen außer Kraft hinzufügen, wie unten in der Ansicht MatrilineView gezeigt.
Jetzt muss ich dem gerenderten Formular etwas Ajax-Code hinzufügen, um die Liste der Pods jedes Mal neu zu setzen, wenn ein neuer Clan ausgewählt wird.
Muss ich das Standardformular vollständig durch ein benutzerdefiniertes Formular ersetzen, das den Ajax-Code enthält? Oder gibt es einen einfacheren Weg mit Flask-Admin?
<b>models.py</b>
...
class Matriline(db.Model):
__tablename__ = 'matriline'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
pod_id = db.Column(db.Integer, db.ForeignKey('pod.id'))
def __unicode__(self):
return self.name
class Pod(db.Model):
__tablename__ = 'pod'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
matrilines = db.relationship('Matriline', backref='pod', lazy='select')
clan_id = db.Column(db.Integer, db.ForeignKey('clan.id'))
def __unicode__(self):
return self.name
class Clan(db.Model):
__tablename__ = 'clan'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
pods = db.relationship('Pod', backref='clan', lazy='select')
def __unicode__(self):
return self.name
...
<b>views.py</b>
from flask_admin.contrib import sqla
from wtforms import SelectField
from orcall import models
class MatrilineView(sqla.ModelView):
column_hide_backrefs = False
form_extra_fields = {
'clan': SelectField('Clan',
choices=[ (c.id, c.name) for c in models.Clan.query.all()])
}
column_list = ('name', 'pod', 'clan')
...
Clan.query.all sollte Clan.query.all() sein, damit es auf flask-admin 1.4.0 funktioniert –