2016-03-31 3 views
0

Я использую 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) 
+0

Что такое AccountDependantMixin? –

+0

@ daniel Это класс, который содержит дополнительную информацию. Это снаружи, потому что другие модели тоже нужны. –

+0

У вас нет атрибутов в 'PlaylistTestFactory', может быть, поэтому связанный объект не создается и вместо него установлен в null? – v1k45

ответ

0

Проблема была у меня была еще одна модель с другой один к одному другому классу, унаследованный от теста.

Я добавил подзадачу на завод этого другого класса, и проблема была решена.

1

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

+0

Я изменил его, я продолжаю получать ту же ошибку –