1

在我的应用程序中,我希望所有表都按公司 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)]

这表明“默认”不起作用。我试过可能的变化,但不是运气。请注意,上面提到的示例工作正常,但设计不同,我想要更简单的东西。

欢迎任何其他方法(如预先设置)。

提前感谢您的帮助

4

0 回答 0