Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在factory boy中使用create_batch时,如何为属性设置序列?_Python_Django_Testing_Pytest_Factory Boy - Fatal编程技术网

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

Python 在factory boy中使用create_batch时,如何为属性设置序列?,python,django,testing,pytest,factory-boy,Python,Django,Testing,Pytest,Factory Boy,在Django使用factory_boy时,我如何实现这一点 models.py class TestModel(models.Model): name = CharField() order = IntegerField() 菜谱 class TestModelFactory(factory.django.DjangoModelFactory): class Meta: model = TestModel name = factory.Laz

在Django使用factory_boy时,我如何实现这一点

models.py

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

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

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

recipes.TestModelFactory.create_batch(4, order=+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)
但这总是会在我的所有对象上设置序列,而我无法设置我想要的值

一种解决方法是:

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_批处理调用中。 所以我的用例是

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

是否仅对
创建批处理
使用此选项?为什么不在工厂中执行
order=factory.Sequence(lambda n:n*10)
 MyModelFactory.create_batch(
     9,
     sort_order=factory.Sequence(lambda n: 10-n))