工厂中的一对一关系 - 完整性错误
One to One relationship in factory - Integrity Error
我正在使用 factory_boy 来创建我正在开发的应用程序的工厂。
我在尝试创建与另一个模型具有一对一关系的模型的 工厂时遇到问题 。
以下是模型:
class Playlist(AccountDependantMixin, models.Model):
test = models.OneToOneField('core.PlaylistTest', related_name='playlist')
class PlaylistTest(Test):
pass
AccountDependantMixin 是一个包含额外信息的 class。它在外面,因为其他模型也需要它。
我有不同种类的测试。这就是 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)
test = factory.RelatedFactory(PlaylistTestFactory)
您需要使用 SubFactory
而不是 RelatedFactory
以便它首先创建测试对象:
A RelatedFactory behaves mostly like a SubFactory, with the main
difference that the related Factory will be generated after the
base Factory.
https://factoryboy.readthedocs.org/en/latest/reference.html#factory.RelatedFactory
问题是我有另一个模型,其中另一个模型是从 Test 继承的 class。
我把子工厂添加到另一个class的工厂,问题就解决了。
我正在使用 factory_boy 来创建我正在开发的应用程序的工厂。 我在尝试创建与另一个模型具有一对一关系的模型的 工厂时遇到问题 。
以下是模型:
class Playlist(AccountDependantMixin, models.Model):
test = models.OneToOneField('core.PlaylistTest', related_name='playlist')
class PlaylistTest(Test):
pass
AccountDependantMixin 是一个包含额外信息的 class。它在外面,因为其他模型也需要它。 我有不同种类的测试。这就是 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)
test = factory.RelatedFactory(PlaylistTestFactory)
您需要使用 SubFactory
而不是 RelatedFactory
以便它首先创建测试对象:
A RelatedFactory behaves mostly like a SubFactory, with the main difference that the related Factory will be generated after the base Factory.
https://factoryboy.readthedocs.org/en/latest/reference.html#factory.RelatedFactory
问题是我有另一个模型,其中另一个模型是从 Test 继承的 class。
我把子工厂添加到另一个class的工厂,问题就解决了。