当 Django 模型中的字段具有选项选项时,请参阅Django 选项字段选项,它利用包含 2 个项目的可迭代对象的可迭代对象来定义允许的值。例如:
楷模
class IceCreamProduct(models.Model):
PRODUCT_TYPES = (
(0, 'Soft Ice Cream'),
(1, 'Hard Ice Cream'),
(2, 'Light Ice Cream'),
(3, 'French Ice Cream'),
(4, 'Italian-style Gelato'),
(5, 'Frozen Dairy Dessert'),
)
type = models.PositiveSmallIntegerField('Type', choices=PRODUCT_TYPES, default=0)
为了在 Factory Boy 中为选项生成随机值,我会使用 factory.fuzzy.FuzzyChoice,但这只会选择 2 个项目的可迭代项。它不能取所选迭代的第一项。例如:
工厂
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = factory.fuzzy.FuzzyChoice(IceCreamProduct.PRODUCT_TYPES)
错误
TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'
获取元组的第一项是不可能的。例如:
工厂
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = factory.fuzzy.FuzzyChoice(IceCreamProduct.PRODUCT_TYPES)[0]
错误
TypeError: 'FuzzyChoice' object does not support indexing
使用默认的 Python 随机迭代器是可能的,但这会在声明时生成一个值,因此每个工厂对象都将具有相同的随机值。例如:
工厂
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = random.choice(IceCreamProduct.PRODUCT_TYPES)][0]
工厂男孩如何解决这个问题?我需要创建自定义 FuzzyAttribute 吗?(如果有,请举个例子)