我正在尝试为User模型模拟一个具有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”列中的空值违反了非空约束
如何创建与用户相关的Benefit
对象?
问题来源:stackoverflow
第一个错误是由于您的UserFactory不继承自factory.django.DjangoModelFactory!
第二,在将“利益”保存到数据库之后,“相关工厂”运行*。但是由于您的Benefit
模型具有User
的ForeignKey
,因此 在创建Benefit
时必须提供User
的实例—这是使用SubFactory
完成的,就像您的初始版本一样!
因此,解决方法很简单:
class UserFactory(factory.django.DjangoModelFactory):
...
class BenefitFactory(factory.django.DjangoModelFactory):
...
user = factory.SubFactory(UserFactory)
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。