工厂男孩子工厂传递对象而不是密钥

7 python sqlalchemy factory-boy

我正在使用带有 SQLAlchemy 的工厂男孩。

我正在尝试创建 Fact 对象,并且希望工厂男孩生成作为 Fact 的外键的 PatientDim 对象。但 Subfactory 不传递键,而是将整个对象传递给外键字段。

我怎样才能只通过 Subfactory 传递 PatientDim 密钥?

工厂.py

class FactFactory(SQLAlchemyModelFactory):
    class Meta:
        model = models.Fact
        sqlalchemy_session = common.Session

    patient_id = factory.SubFactory(PatientDimFactory)

class PatientDimFactory(SQLAlchemyModelFactory):
    class Meta:
        model = models.PatientDim
        sqlalchemy_session = common.Session
Run Code Online (Sandbox Code Playgroud)

模型.py

class Fact(TimeStampedModel):
    class Meta:
        db_table = 'fact'

    id = Column(Integer, primary_key=True)
    patient_id = Column('patient_id', Integer, ForeignKey(PatientDim.__table__.c.id), nullable=False)
    patient = relationship(PatientDim, foreign_keys='Fact.patient_id' )

Base = declarative_base()
class PatientDim(TimestampMixin, Base):
    __tablename__ = 'patient_dim'

    id = Column('id', Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

小智 2

我今天的解决方法:

从工厂生成字典数据

import factory
data = factory.build(dict, FACTORY_CLASS=FactFactory)
Run Code Online (Sandbox Code Playgroud)

创建ForeignKey/subFactory对象

patient_dim = PatientDimFactory()
    
Run Code Online (Sandbox Code Playgroud)

更改创建数据中的foreignKey对象

data['patient_id '] = patient_dim.pk
Run Code Online (Sandbox Code Playgroud)

在创建表单中使用打包数据

form = MyCrateForm(data=data)
Run Code Online (Sandbox Code Playgroud)