我正在使用SQLAlchemy的工厂男孩。
我正在尝试创建Fact对象,我希望工厂男孩生成PatientDim对象,这些对象是Fact的外键。但是Subfactory没有传递密钥,而是将整个对象传递给foreignkey字段。
我怎样才能通过Subfactory传递PatientDim键?
Factories.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
Models.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)
答案 0 :(得分:1)
这似乎与我在此问题中发现的问题相同:Why isn't SQLAlchemy translating this object generated by a FactoryBoy SubFactory into a foreign key?
基于此,问题在于此问题基于patient_id
列而不是根据关系patient
命名SubFactory。
在这里的示例中:https://github.com/FactoryBoy/factory_boy/blob/master/examples/flask_alchemy/demoapp_factories.py,您会看到它们基于关系而不是外键列来命名SubFactory。因此,将其更新为patient = factory.SubFactory(PatientDimFactory)
似乎可以正常工作。
答案 1 :(得分:0)
从Factory生成dict数据
data = factory.build(dict, FACTORY_CLASS=FactFactory)
创建ForeignKey / subFactory对象
patient_dim = PatientDimFactory()
更改已创建数据中的foreignKey对象
data['patient_id '] = patient_dim.pk
在创建表单中使用创建的数据
form = MyCrateForm(data=data)