在我的应用程序中,我希望所有表都按公司 ID 保存和读取数据。所有表都有 FK 到公司 ID。通过提供公司、用户和密码,我已经将登录和注册视图覆盖到登录。用户登录后,公司 ID 显示在“g.user.cia_id_fk”中。cia_id_fk 已添加到“ab_user” 在此处输入图像描述 我的方法是在模型中将“默认”cia_id_fk 设置为“g.user.cia_id_fk”。我正在关注“extendsecurity2”示例(https://github.com/dpgaspar/Flask-AppBuilder/blob/master/examples/extendsecurity2/app/models.py),其中“Contact”模型 Created_by 列默认为“g.user 。ID”
模型.py
class Company(Model):
__tablename__ = "company"
id = Column(Integer, primary_key=True)
code = Column(String(15), unique=True, nullable=False)
name = Column(String(60), unique=False, nullable=False)
class AlpUser(User):
__tablename__ = 'ab_user'
cia_id_fk = Column(Integer, ForeignKey("company.id"), nullable=False)
class Status(Model):
__tablename__ = "WorkItemStatus"
id = Column(Integer, primary_key=True)
status = Column(String(30), nullable=False)
@declared_attr
def cia_id_fk(cls):
return Column(
Integer, ForeignKey("company.id"), default=cls.get_cia_id, nullable=False
)
@declared_attr
def cia_id(cls):
return relationship(
"Company",
primaryjoin="%s.cia_id_fk == Company.id" % cls.__name__,
enable_typechecks=False,
)
@classmethod
def get_cia_id(cls):
try:
return g.user.cia_id
except Exception:
return None
尝试在“状态”中添加记录时出现此错误:请注意,表单中未显示字段“cia_id_fk”。
integrity error: (sqlite3.IntegrityError) NOT NULL constraint failed: status.cia_id_fk
[SQL: INSERT INTO "status" (status, cia_id_fk) VALUES (?, ?)]
[parameters: ('pending', None)]
这表明“默认”不起作用。我试过可能的变化,但不是运气。请注意,上面提到的示例工作正常,但设计不同,我想要更简单的东西。
欢迎任何其他方法(如预先设置)。
提前感谢您的帮助