我正在尝试使用 Flask-Admin 为下面所示的模型 Matriline 创建一个创建/编辑表单。该模型有一个字符串字段 name 和一个字段 pod_id,该字段具有对另一个模型 Pod 的外键约束,该模型本身也有一个外键字段氏族模型。
Flask-Admin 创建的默认表单显示 name 字段和 Pod 实例的选择字段,但我想添加一个字段 Clan,这将根据所选的Clan实例重置Pod列表。
为了添加 Clan 字段,我覆盖了 Matriline 的默认 ModelView,并添加了一个包含所有 Clan 实例的额外选择字段 Clan,如请查看下面的母系视图。
现在,我需要向呈现的表单添加一些 Ajax 代码,以便在每次选择新部落时重置 Pod 列表。
我是否必须用包含 Ajax 代码的自定义表单完全替换默认表单?或者有没有更简单的方法可以使用 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')
...