当Django模型中的字段具有选项选项时,请参阅Django choices field option,它利用包含2个项目的可迭代项的迭代来定义允许哪些值。例如:Factory Boy随机选择字段选项“选项”
模型
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.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? (如果是这样,请举例)
谢谢您!这解决了我的问题。我还会尝试替换我所有的模糊属性, – Robin