Factory_boy 不创建不同的 User 对象 Django

Oja*_*ale 5 python django factory-boy

我是 Django 的 Factory_boy 新手。花了一些时间后,我了解了如何为用户模型创建工厂。

我正在使用默认的用户模型,以下是我的工厂。我使用 Faker 来获得随机性

import factory
from . import models
from django.contrib.auth.models import User
from faker import Faker
from django.contrib.auth.hashers import make_password

fake = Faker()

class UserFactory(factory.DjangoModelFactory):
    class Meta:
        model = User
        django_get_or_create = ('email',)

    first_name = fake.first_name()
    last_name = fake.last_name()
    email = first_name+"."+last_name+"@gmail.com"
    password = make_password("ojasojas")
    username = first_name+"_"+last_name
Run Code Online (Sandbox Code Playgroud)

现在在 django shell 中

我使用 UserFactory.create() 来创建用户。这很好用。是否可以循环创建语句并创建 5 个不同的用户?现在,当我这样做时,我只获得一个用户(创建一次并“获取”4 次),如下所示。我缺少什么?在此输入图像描述

min*_*zer 2

您正在为工厂定义类属性,仅在定义类时才会评估这些属性。email = first_name+"."+last_name+"@gmail.com"将被评估一次,而不是每次调用时UserFactory.create(),因此存在唯一约束错误。通常的解决方案是通过定义实例属性__init__(),但 FactoryBoy 有自己的解决方案: 惰性属性