2017-05-25 40 views
0

鑑於以下型號:Django的工廠男孩使用

from django.db import models 


class A(models.Model): 
    foo = models.TextField() 


# B inherits from A, it's not abstract so it should 
# create a table with a foreign key relationship 
class B(A): 
    bar = models.TextField() 

而且隨着DjangoModel工廠以下測試:

from django.test import TestCase 
import factory 
from factory.django import DjangoModelFactory 
from .models import A, B 


class AFactory(DjangoModelFactory): 
    foo = factory.Faker('name') 

    class Meta: 
     model = A 


class BFactory(DjangoModelFactory): 
    bar = factory.Faker('name') 

    class Meta: 
     model = B 


class BTestCase(TestCase): 
    def test_1(self): 
     b = BFactory() 
     print(b.foo) # prints '' 

我怎樣才能得到b.foo指實際A實體與有效foo屬性?

目前b.foo只是返回一個空字符串。但是,如果我創建使用AFactoryA實體,該實體擁有正確填充foo領域:

>>> a_ent = AFactory() 
>>> a_ent.foo 
'Nicholas Williams' 

我想BFactory創建A實體對我來說b可以參考。

這可能嗎?

回答

1

你只需從AFactory延長BFactory:

class AFactory(DjangoModelFactory): 
    foo = factory.Faker('name') 

    class Meta: 
     model = A 


class BFactory(AFactory): 
    bar = factory.Faker('name') 

    class Meta: 
     model = B 

b = BFactory() 
print(b.foo) # Robert Rogers 
print(b.bar) # Maria Clark 

BFactory用於通過B模型來創建數據庫中的記錄,所以這個工作,你需要定義在BFactory工廠領域。這可以通過上面的繼承來輕鬆完成。

+0

工作,謝謝你,這樣一個明顯的解決方案! – Nobilis