如ER图,一共三张表,其中SM_GateWay和SM_GATEWAY_TYPE是多对一的关系,SM_GateWay和insightchina_sim_status是一对一的关系;
需求:
想要在编辑insightchina_sim_status表中数据的时候,也能编辑SM_GateWay表中的数据,同时在insightchina_sim_status的View中能看到SM_GateWay中的信息;
说起来容易,但做起来难,在百度,google找了几天,愣是没有这种案例,就像跷跷板,无论你怎么弄,总之会有一头顾不上,该解决方案,借用一对多和一对一的思维方式,最后实现需求
我用的是Flask-Admin自带的后端管理工具,只是用到View和Model这两块;
在一般情况下,一对一的关联模型数据,可以很好的显示在View中,但是你无法在编辑的时候对所关联的模型进行编辑,如果你想编辑,就必须用到Inline_model模块,但是如果你用了Inline_model模块,就无法将关联模型显示在List的详情页面上,因为Inline_model是用在多对多或者一对多的关联模型上的;
下面开始上代码,几个需要注意的关键代码relationship关系,__repr__函数,hybrid_property装饰器,__mapper_args__排序,back_populates反向引用 这几个地方是我解决这个问题的关键点;
Model.py
class SM_GATEWAY(db.Model):
"""
网关表
"""
__tablename__ = 'sm_gateway'
GATEWAY_ID = db.Column(db.Integer, primary_key=True)
GATEWAY_ACCOUNT = db.Column(db.String(60), unique=False)
GATEWAY_PWD = db.Column(db.Text, unique=False)
IF_IOT_HU