我使用 SQLalchemy 作为我的 ORM,并试图将我的测试装置移植到 factory_boy。我的模式包括一对多关系中的两个对象。 IE。一个模型的实例具有类似列表的结构和另一个模型的实例。示例:
class Person(...):
id = Column(Integer, primary_key=True)
name = Column(Text)
[...]
class Address(...):
id = Column(Integer, primary_key=True)
city = Column(Text)
[...]
person_id = Column(Integer, ForeignKey('person.id'))
person = relationship("Person", backref="addresses")
现在我正在尝试创建一个工厂来创建具有几个地址的人。 Factory_boy 有 SubFactory
。但我只看到如何在一对一关系中使用它。我知道我可以使用单独的工厂创建地址,然后附加它们,但我想做一些类似 person =
PersonFactory.create(num_addresses=4)` 的事情。
有谁知道目前这在 factory_boy 中是否可行?
我使用 factory_boy 2.4.1。
最佳答案
我在我的项目中使用了这个模式。假设您已经有了 AddressFactory
。
class PersonFactory(factory.alchemy.SQLAlchemyFactory):
class Meta:
model = Person
@factory.post_generation
def addresses(obj, create, extracted, **kwargs):
if not create:
return
if extracted:
assert isinstance(extracted, int)
AddressFactory.create_batch(size=extracted, person_id=self.id, **kwargs)
用法
PersonFactory(addresses=4)
这将创建具有 4 个 Address
es 的 Person
这也可以接受kwargs
PersonFactory(addresses=2, addresses__city='London')
这将创建具有 2 个 Address
的 Person
,其中 city
字段设置为 'London'
这是一篇可能对您有所帮助的博文 https://simpleit.rocks/python/django/setting-up-a-factory-for-one-to-many-relationships-in-factoryboy/
关于python - factory_boy 中的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120685/