2016-03-31 1 views
0

J'utilise factory_boy pour créer les usines de l'application sur laquelle je travaille. J'ai un problème en essayant de créer l'usine d'un modèle qui a une relation un à un à un autre modèle.Relation One to One en usine - Intégrité Erreur

Voici les modèles:

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

class PlaylistTest(Test): 
    pass 

AccountDependantMixin est une classe qui contient des informations supplémentaires. C'est à l'extérieur parce que les autres modèles en ont aussi besoin. J'ai différents types de test. Voilà pourquoi PlaylistTest est vide

Ce sont les usines:

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


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

Et voici comment je suis en train d'initialiser l'instance avec l'usine:

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

Je reçois ce qui suit erreur:

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

Qu'est-ce que AccountDependantMixin? –

+0

@daniel C'est une classe qui contient des informations supplémentaires. C'est à l'extérieur parce que les autres modèles en ont aussi besoin. –

+0

Vous n'avez aucun attribut dans 'PlaylistTestFactory', c'est peut-être pourquoi l'objet associé n'est pas créé et est défini sur null à la place? – v1k45

Répondre

0

Le problème est que j'avais un autre modèle avec un autre à un à l'autre classe hérité de Test.

J'ai ajouté la sous-matière à la fabrique de cette autre classe et le problème a été résolu.

1

test = factory.RelatedFactory(PlaylistTestFactory)

Vous devez utiliser un SubFactory plutôt que d'un RelatedFactory afin qu'il crée l'objet premier test:

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

Je l'ai changé, en continuant à avoir la même erreur –