【发布时间】:2020-02-12 15:32:54
【问题描述】:
我正在使用 Flask-Admin 为我的 Web 应用程序构建一个管理仪表板。对于用户/地址关系,我使用的是一对一的关系。在用户编辑表单上,我希望能够像 inline_models 提供的那样编辑地址的各个组成部分(即街道地址、城市或邮政编码)。相反,flask-admin 会生成一个选择字段,并且只允许我选择不同的地址。
我尝试在 UserModelView 定义中使用 inline_models = ['address']。但是,由于用户/地址关系配置为 uselist=False,我得到地址对象不可迭代错误。将 uselist 切换为 True 会影响我代码的其他部分,所以我宁愿将其保留为 False。
通过查看flask-admin/contrib/sqla/forms,在get_forms函数中,它被分配了一个一对多的标签,这是驱动使用选择字段的原因。
在进一步深入研究之前,我认为最好看看其他人是否遇到过此问题或有推荐的修复/解决方法。
models.py
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64))
address = db.relationship("Address", backref="user",
cascade="all, delete-orphan", lazy=False,
uselist=False, passive_deletes=True)
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
line1 = db.Column(db.String(128))
zip = db.Column(db.String(20), index=True)
city = db.Column(db.String(64), index=True, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("user.id",
ondelete="CASCADE"))
admin.py
class UserModelView(ModelView):
column_list = [User.username, 'address']
form_columns = (User.username, 'address')
admin = Admin(name='Ask', template_mode='bootstrap3')
admin.add_view(UserModelView(User, db.session))
【问题讨论】:
标签: flask sqlalchemy flask-admin