我正在使用SQLAlchemy的工厂男孩。
我正在尝试创建事实对象,并且我希望factory boy生成PatientDim对象,这些对象是事实的外键。但是Subfactory并不传递密钥,而是将整个对象传递给foreignkey字段。
如何才能仅通过子工厂传递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.SessionModels.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)发布于 2018-12-27 22:39:07
我今天的解决方法是:
从工厂生成dict数据
import factory
data = factory.build(dict, FACTORY_CLASS=FactFactory)创建ForeignKey/subFactory对象
patient_dim = PatientDimFactory()更改已创建数据中的foreignKey对象
data['patient_id '] = patient_dim.pk在创建表单中使用create数据
form = MyCrateForm(data=data)发布于 2020-08-15 03:41:30
这看起来和我在这个问题中发现的问题是一样的:Why isn't SQLAlchemy translating this object generated by a FactoryBoy SubFactory into a foreign key?基于这个问题,问题是这个SubFactory是基于patient_id列而不是关系patient命名的。
在下面的示例中:https://github.com/FactoryBoy/factory_boy/blob/master/examples/flask_alchemy/demoapp_factories.py,您可以看到它们基于关系来命名SubFactory,而不是基于外键的列。因此,将其更新到patient = factory.SubFactory(PatientDimFactory)应该是可行的。
https://stackoverflow.com/questions/40624243
复制相似问题