工厂中的一对一关系 - 完整性错误

时间:2016-03-31 12:56:55

标签: python django testing factory factory-boy

我正在使用factory_boy来创建我正在处理的应用程序的工厂。 我在尝试创建与另一个模型具有一对一关系的模型的工厂时遇到问题

以下是模型:

class Playlist(AccountDependantMixin, models.Model):
    test = models.OneToOneField('core.PlaylistTest', related_name='playlist')

class PlaylistTest(Test):
    pass

AccountDependantMixin是一个包含额外信息的类。它在外面,因为其他模型也需要它。 我有不同的测试。这就是PlaylistTest为空的原因

这是工厂:

class PlaylistTestFactory(factory.DjangoModelFactory):
    class Meta:
        model = PlaylistTest


class PlaylistFactory(factory.DjangoModelFactory):
    class Meta:
        model = Playlist       
    test = factory.SubFactory(PlaylistTestFactory)

以下是我尝试使用工厂初始化实例的方法:

self.playlist = PlaylistFactory(creator=AdminUserFactory(account=self.account))

我收到以下错误:

IntegrityError: null value in column "test_id" violates not-null constraint
DETAIL:  Failing row contains (1, , playlist0, sub_title0, description0, 0, t, f, 2016-03-31 12:49:23.739207+00, 0, 2, 1, null)

2 个答案:

答案 0 :(得分:1)

test = factory.RelatedFactory(PlaylistTestFactory)

您需要使用SubFactory而不是RelatedFactory,以便首先创建测试对象:

  

一个RelatedFactory的行为大多像SubFactory,主要的   在之后生成相关工厂的差异   基地工厂。

https://factoryboy.readthedocs.org/en/latest/reference.html#factory.RelatedFactory

答案 1 :(得分:0)

问题是我有另一个模型与另一个一对一到另一个继承自Test的类。

我把这个子项目的附件加到了这个其他类的工厂,问题解决了。