Flask 管理一对一关系并编辑表单

Flask 管理一对一关系并编辑表单,flask,sqlalchemy,flask-admin,Flask,Sqlalchemy,Flask Admin,我正在使用Flask admin为我的web应用构建管理仪表板。对于用户/地址关系,我使用的是一对一关系。在用户编辑表单上,我希望能够编辑地址的各个组成部分(即街道地址、城市或邮政编码),类似于内联_模型提供的内容。相反,flask admin生成一个选择字段,只允许我选择不同的地址 我尝试在UserModelView定义中使用inline_models=['address']。但是,由于用户/地址关系被配置为uselist=False,因此我得到了地址对象NotIterable错误。将usel

我正在使用Flask admin为我的web应用构建管理仪表板。对于用户/地址关系,我使用的是一对一关系。在用户编辑表单上,我希望能够编辑地址的各个组成部分(即街道地址、城市或邮政编码),类似于内联_模型提供的内容。相反,flask admin生成一个选择字段,只允许我选择不同的地址

我尝试在UserModelView定义中使用inline_models=['address']。但是,由于用户/地址关系被配置为uselist=False,因此我得到了地址对象NotIterable错误。将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"))
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))
admin.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"))
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))