gpt4 book ai didi

python - factory_boy 中的一对多关系

转载 作者:太空狗 更新时间:2023-10-29 22:00:05 26 4
gpt4 key购买 nike

我使用 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

https://factoryboy.readthedocs.io/en/latest/reference.html?highlight=post_generation#factory.post_generation

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 个 Addresses 的 Person

这也可以接受kwargs

PersonFactory(addresses=2, addresses__city='London')

这将创建具有 2 个 AddressPerson,其中 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com