Django 模型工厂获取或创建

use*_*935 1 django django-models factory-boy

我有一个 Django 模型,定义如下:

    class CustomModel(models.Model):
        column = models.CharField(max_length=50, unique=True)
Run Code Online (Sandbox Code Playgroud)

为模型定义工厂

from factory_boy import DjangoModelFactory
class CustomModelFactory(DjangoModelFactory):
    
    column = 'V1'

FACTORY_FOR = CustomModelFactory()
Run Code Online (Sandbox Code Playgroud)

我如何确保工厂每次都实现 get_or_create 而不是创建?

有谁知道如何做到这一点?

Lin*_*ter 5

根据工厂文档:https : //factoryboy.readthedocs.io/en/latest/orms.html#factory.django.DjangoOptions.django_get_or_create

他们使用 get_or_create 而不是 create 的方法是添加“FACTORY_DJANGO_GET_OR_CREATE”以及将用于获取的字段列表:

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = 'myapp.User'  # Equivalent to ``model = myapp.models.User``
        django_get_or_create = ('username',)
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中,这看起来像这样:

    class CustomModelFactory(DjangoModelFactory):
        class Meta:
            model = CustomModel
            django_get_or_create = ('column',)
Run Code Online (Sandbox Code Playgroud)