當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