gpt4 book ai didi

python - 如何在 factory-boy 中使用 create_batch 时为属性设置序列?

转载 作者:行者123 更新时间:2023-12-03 23:54:07 26 4
gpt4 key购买 nike

在 Django 中使用 factory_boy 时,我该如何实现?

模型.py

class TestModel(models.Model):
name = CharField()
order = IntegerField()

食谱.py
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = 0

测试文件
recipes.TestModelFactory.create_batch(4, order=+10)

或者
recipes.TestModelFactory.create_batch(4, order=seq(10))

或类似的东西,以达到这个结果:
TestModel.objects.all().values_list('order', flat=True)

[10, 20, 30, 40]

更新

Ty @trinchet 的想法。所以我想一种解决方案是:
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = factory.Sequence(lambda n: n * 10)

但这总是会在我的所有对象上设置序列,而我无法设置我想要的值。

一种解决方法是:
class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = 0

然后在测试中:
    recipes.MenuItemFactory.reset_sequence(1)

recipes.MenuItemFactory.create_batch(
4,
parent=self.section_menu,
order=factory.Sequence(lambda n: n * 10)
)

这会给我我想要的结果。但这会重置所有序列。我希望它能够为订单动态设置序列。

最佳答案

以防万一有人觉得它有帮助。

我发现这篇文章试图实现负排序顺序。并且仅在 create_batch 调用中。
所以我的用例是

 MyModelFactory.create_batch(
9,
sort_order=factory.Sequence(lambda n: 10-n))

关于python - 如何在 factory-boy 中使用 create_batch 时为属性设置序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100035/

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