鉴于以下模型:
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
只返回一个空字符串。但是,如果我使用A
创建AFactory
实体,则该实体具有正确填充的foo
字段:
>>> a_ent = AFactory()
>>> a_ent.foo
'Nicholas Williams'
我希望BFactory为A
可以参考的我创建一个b
实体。
这可能吗?
答案 0 :(得分: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上定义工厂字段。这可以通过上面的继承轻松完成。