我试图模拟一个具有用户模型的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
模型有一个ForeignKey
到User
,因此在创建Benefit
时,您必须提供User
的实例——这是使用SubFactory
完成的,就像您的初始版本一样!
因此,修复方法很简单:
class UserFactory(factory.django.DjangoModelFactory):
...
class BenefitFactory(factory.django.DjangoModelFactory):
...
user = factory.SubFactory(UserFactory)