来自factory-boy的Factory的可选(可为空)值

Ily*_*hov 4 factory nullable faker factory-boy option-type

我使用lazy_attributeand choicewith None,但我认为可以做得更好。

import factory  # from factory-boy
from random import choice


class Device(models.Model):
    deleted_at = models.DateTimeField(null=True, blank=True)


class DeviceFactory(factory.DjangoModelFactory):
    class Meta:
        model = Device

    @factory.lazy_attribute
    def deleted_at(self):
        return choice([Faker('date_time').generate(), None])
Run Code Online (Sandbox Code Playgroud)

Jas*_*tle 11

Factory-boy 有一个可空字段的Maybe 声明。这里使用它的最简单的方法是创建一个中间字段,然后排除中间字段:

class DeviceFactory(factory.DjangoModelFactory):
    class Meta:
        model = Device
        exclude = ('is_deleted',)

    is_deleted = factory.Faker('pybool')
    deleted_at = factory.Maybe('is_deleted', Faker('date_time'), None)
Run Code Online (Sandbox Code Playgroud)