如何在factoryboy中使用create_batch时为属性设置序列?

2024-10-03 21:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django使用factory_boy时,我如何做到这一点?在

在模型.py在

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

在食谱.py在

^{pr2}$

在测试.py在

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]

更新

泰@特林切特的主意。所以我想一个解决办法是:

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

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

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

解决方法是:

^{pr2}$

然后在测试中:

    recipes.MenuItemFactory.reset_sequence(1)

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

这会给我我想要的结果。但这会重置所有序列。我希望它能够动态地设置顺序,只是为了顺序。在


Tags: lambdanamepyfactorycreatebatchorder序列