Wenn ein Feld in einem Django-Modell die Optionsauswahlmöglichkeiten enthält, siehe Django choices field option, verwendet es eine iterierbare Anzahl von Iterablen von 2 Elementen, um zu definieren, welche Werte zulässig sind. Zum Beispiel:Factory Boy-Zufallsauswahl für ein Feld mit Feldoption "Auswahlmöglichkeiten"
Modelle
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)
auf einen zufälligen Wert in der Fabrik Boy für Entscheidungen generieren ich factory.fuzzy.FuzzyChoice verwenden würde, aber dies wählt nur eine iterable von 2 Artikeln. Es kann nicht das erste Element des ausgewählten iterablen Elements verwenden. Zum Beispiel:
Fabriken
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = factory.fuzzy.FuzzyChoice(IceCreamProduct.PRODUCT_TYPES)
Fehler
TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'
das erste Element des Tupels zu erhalten ist nicht möglich. Zum Beispiel:
Fabriken
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = factory.fuzzy.FuzzyChoice(IceCreamProduct.PRODUCT_TYPES)[0]
Fehler
TypeError: 'FuzzyChoice' object does not support indexing
Es ist möglich, mit dem Standard-Python zufällig Iterator, aber dies erzeugt einen Wert auf der Deklaration und so jedes Factory-Objekt wird denselben zufälligen Wert haben. Zum Beispiel:
Fabriken
class IceCreamProductFactory(factory.django.DjangoModelFactory):
class Meta:
model = IceCreamProduct
type = random.choice(IceCreamProduct.PRODUCT_TYPES)][0]
Wie kann dies in der Fabrik Boy gelöst werden? Muss ich ein benutzerdefiniertes FuzzyAttribute erstellen? (Wenn ja, bitte geben Sie ein Beispiel)
Thank Sie! Dies löst mein Problem. Ich werde auch versuchen, alle meine unscharfen Attribute zu ersetzen, – Robin