【发布时间】:2021-08-23 20:48:03
【问题描述】:
我正在尝试使用 django-factory-boy 和 faker 创建多个 django 模型实例。但是我需要批量创建实例(不是单个)。但是我不能使两个属性都对应(货币的code 和name)。
我有一个 django 模型:
class Currency(models.Model):
"""Currency model"""
name = models.CharField(max_length=120, null=False,
blank=False, unique=True)
code = models.CharField(max_length=3, null=False, blank=False, unique=True)
symbol = models.CharField(max_length=5, null=False,
blank=False, default='$')
def __str__(self) -> str:
return self.code
我有一家工厂
import factory
from apps.Payment.models import Transaction, Currency
from faker import Faker
fake = Faker()
class CurrencyFactory(factory.django.DjangoModelFactory):
class Meta:
model = Currency
# code and name get assigned when the class is called hence if we use
# create_batch(n) we get all n object same
# code, name = fake.currency()
code = factory.LazyAttribute(lambda _: fake.currency()[0])
name = factory.LazyAttribute(lambda _: fake.currency()[1])
symbol = '$'
我面临的问题是code 和name 得到不同的值并且不匹配。看看faker 返回什么。
>>> from faker import Faker
>>> fake = Faker()
>>> fake.currency()
('JPY', 'Japanese yen')
查看货币名称与货币代码不对应。我还需要使用CurrencyFactory.create_batch(5) 创建至少 5 到 6 个对象。
# mismatch in code and name
NAME CODE
Netherlands Antillean guilder ZAR
Western Krahn language UGX
Colombian peso KHR
我想要什么
NAME CODE
Indian National Rupee INR
Japanese yen JPY
【问题讨论】:
标签: python django integration-testing faker factory-boy