gpt4 book ai didi

Flask Admin 一对一关系和编辑表单

转载 作者:行者123 更新时间:2023-12-04 17:32:19 26 4
gpt4 key购买 nike

我正在使用 Flask-Admin 为我的网络应用构建一个管理仪表板。对于用户/地址关系,我使用的是一对一关系。在用户编辑表单上,我希望能够像 inline_models 提供的那样编辑地址的各个组成部分(即街道地址、城市或 zip )。相反,flask-admin 生成一个选择字段,只允许我选择不同的地址。

我尝试在 UserModelView 定义中使用 inline_models = ['address'] 。但是,由于用户/地址关系被配置为 uselist=False,我得到了地址对象不可迭代的错误。将 uselist 切换为 True 会影响我代码的其他部分,因此我宁愿将其保留为 False。

通过查看 flask-admin/contrib/sqla/forms,在函数 get_forms 中,它被分配了一个一对多的标签,这是驱动选择字段使用的原因。

在进一步深入之前,我认为最好看看是否有其他人遇到过这个问题或有推荐的修复/解决方法。

模型.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))

最佳答案

你可以创建 2 个关系

    # Relation for flask admin inline model
address_cms_relationsip = db.relationship(
"Address", backref="user", cascade="all, delete-orphan", lazy=False,
uselist=True, passive_deletes=True)

address_relationship = db.relationship(
"Address", cascade="all, delete-orphan", lazy=False,
uselist=False, passive_deletes=True)

@property
def address(self):
return self.address_relationship

在您的代码中,您可以使用属性 address

user: User # some User object
user.address.city

关于Flask Admin 一对一关系和编辑表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com