如何创建一个在用户上有Fk的实例与工厂男孩



我试图模拟一个具有用户模型的FK的资源对象,但当我实例化该类时,出现了错误:

bf = BenefitFactory()

AttributeError:类型对象"UserFactory"没有属性"_meta">

工厂:

class UserFactory:
class Meta:
model = User
first_name = factory.Faker('first_name')
last_name = factory.Faker('last_name')
username = factory.Faker('email')
password = factory.LazyFunction(lambda: make_password('pi3.1415'))
is_staff = False
is_superuser = False

class BenefitFactory(factory.django.DjangoModelFactory):
class Meta:
model = Benefit
user = factory.SubFactory(UserFactory)

我也尝试过使用RelatedFactory这样的方法:

class BenefitFactory(factory.django.DjangoModelFactory):
class Meta:
model = Benefit
user = factory.RelatedFactory(UserFactory, 'user')

但后来我得到错误说:

django.db.utils.IntegrityError:列"user_id"中的null值违反了非null约束

如何创建与用户相关的Benefit对象?

第一个错误来自于您的UserFactory没有从factory.django.DjangoModelFactory继承!

对于第二个,RelatedFactory在将Benefit保存到数据库后运行;但是,由于您的Benefit模型有一个ForeignKeyUser,因此在创建Benefit时,您必须提供User的实例——这是使用SubFactory完成的,就像您的初始版本一样!

因此,修复方法很简单:

class UserFactory(factory.django.DjangoModelFactory):
...

class BenefitFactory(factory.django.DjangoModelFactory):
...
user = factory.SubFactory(UserFactory)

最新更新