Django Factory Boy 用法
Django Factory boy usage
给定以下模型:
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
引用具有有效 foo
属性的实际 A
实体?
目前 b.foo
只是 returns 一个空字符串。但是如果我使用 AFactory
创建一个 A
实体,该实体有一个正确填充的 foo
字段:
>>> a_ent = AFactory()
>>> a_ent.foo
'Nicholas Williams'
我希望 BFactory 为我创建一个 b
可以引用的 A
实体。
这可能吗?
您只需要从 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 上定义工厂字段。这可以通过上面的继承轻松完成。
给定以下模型:
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
引用具有有效 foo
属性的实际 A
实体?
目前 b.foo
只是 returns 一个空字符串。但是如果我使用 AFactory
创建一个 A
实体,该实体有一个正确填充的 foo
字段:
>>> a_ent = AFactory()
>>> a_ent.foo
'Nicholas Williams'
我希望 BFactory 为我创建一个 b
可以引用的 A
实体。
这可能吗?
您只需要从 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 上定义工厂字段。这可以通过上面的继承轻松完成。