开发者社区> 问答> 正文

如何创建带有Fk on User with factory boy的实例?

我正在尝试为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

展开
收起
is大龙 2020-03-24 21:50:54 511 0
1 条回答
写回答
取消 提交回答
  • 第一个错误是由于您的UserFactory不继承自factory.django.DjangoModelFactory!

    第二,在将“利益”保存到数据库之后,“相关工厂”运行*。但是由于您的Benefit模型具有UserForeignKey,因此 在创建Benefit时必须提供User的实例—这是使用SubFactory完成的,就像您的初始版本一样!

    因此,解决方法很简单:

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

    回答来源:stackoverflow

    2020-03-24 21:51:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载