2016-03-31 36 views
0

Çalıştığım uygulamanın fabrikalarını oluşturmak için factory_boy kullanıyorum. başka bir modele birebir ilişkisi olan bir modelin fabrikasını oluşturmaya çalışırken bir sorun yaşıyorum.Fabrikada birebir ilişki - Bütünlük Hatası

İşte modeller şunlardır:

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

class PlaylistTest(Test): 
    pass 

AccountDependantMixin ekstra bilgileri içeren bir sınıftır. Dışarıda çünkü diğer modellerin de ihtiyacı var. Farklı türden testlerim var.

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

alıyorum şu: Ben fabrika örneğini başlatmak için çalışıyorum burada nasıl

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


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

Ve edilir: PlaylistTest boş olmasının nedeni budur

Bu

fabrikalardır hata:

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 nedir? –

+0

@daniel Ek bilgi içeren bir sınıf. Dışarıda çünkü diğer modellerin de ihtiyacı var. –

+0

'PlaylistTestFactory' içinde hiçbir özniteliğiniz yok, belki de ilgili nesne neden oluşturulmuyor ve null olarak ayarlanmış mı? – v1k45

cevap

0

Sorun başka bir sınıfa birine başkasıyla başka bir model vardı olduğunu Test'ten devralındı.

Bu alt sınıfa ait fabrikanın alt yüzeyini ekledim ve sorun çözüldü.

1

test = factory.RelatedFactory(PlaylistTestFactory)

o ilk test nesnesi oluşturur, böylece

Bir RelatedFactory yerine SubFactory kullanmak gerekir:

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

Bunu değiştirdim, aynı hatayı alıyorum –