【发布时间】:2015-08-01 17:37:31
【问题描述】:
我正在尝试使用 Flask-Admin 为模型 Matriline 创建一个创建/编辑表单,如下所示。这个模型有一个字符串字段 name 和一个字段 pod_id 与另一个模型 Pod 的外键约束,它本身有一个外键字段氏族模型。
Flask-Admin 创建的默认表单显示 name 字段和 Pod 实例的选择字段,但我想添加一个字段 Clan ,这将根据选择的 Clan 实例重置 Pod 列表。
要添加 Clan 字段,我会覆盖 Matriline 的默认 ModelView 并添加一个带有所有 Clan 实例的额外选择字段 Clan,如显示在下面的视图 MatrilineView 中。
现在我需要在渲染的表单中添加一些 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')
...
【问题讨论】:
标签: flask flask-admin