我有一个flask项目,使用的是sqlalchemy独立模式,它不是为flask项目编码的(因此只使用纯sqlalchemy)
class Drive(Base):
"""
A drive in an edit station.
"""
__tablename__ = 'drives'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True,
autoincrement=True
)
name = sqlalchemy.Column(sqlalchemy.String(64))
computer_id = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey(Computer.id)
)
computer = relationship('Computer', backref='drives')
# .......... more attr
current_workgroup_id = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey(Workgroup.id),
nullable=False
)
workgroup = relationship('Workgroup', backref='drives')
class Workgroup(Base):
"""
A workgroup.
"""
__tablename__ = 'workgroups'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True,
autoincrement=True
)
name = sqlalchemy.Column(sqlalchemy.String(16))
shorthand = sqlalchemy.Column(sqlalchemy.String(4))
数据库模式在MySQL中运行良好。如果我有一个带有工作组的驱动器,则无法删除该工作组
但是,当使用flask-admin
时,它没有这样的强制。我删除workgroup
记录,drive.workgroup
被更新为空值。我不知道如何让Flask管理模块执行引用完整性
admin = Admin(app, name='Admin Section', template_mode='bootstrap3')
temp_session = EditSession(bind=edit_engine)
admin.add_view(my_admin.ComputerAdmin(Computer, temp_session))
admin.add_view(my_admin.DriveAdmin(Drive, temp_session))
admin.add_view(my_admin.RoomAdmin(Room, temp_session))
admin.add_view(my_admin.WorkgroupAdmin(Workgroup, temp_session))
大多数column_* = True/False
都是我想弄清楚的-\
编辑:我不是在寻找can_delete
设置。我想真正执行诚信的意义上,他们应该仍然可以删除它,只要没有任何联系
看起来好像
是问题所在。似乎是
backref
将此表视为父类,导致了多对多关系,而实际上我想要的是多对一关系。正在将行更新为workgroup = relationship('Workgroup')
似乎支持诚信如预期
相关问题 更多 >
编程相关推荐