Случайный вариант в раскрывающейся форме Django

Я ковырял свой мозг, пытаясь понять это, и теперь я обращаюсь за помощью к сообществу.

Я использую модели для создания формы в Django, и я хочу добавить случайную опцию к некоторым из раскрывающихся вариантов.

Вот общее представление о том, с чем я работаю:

models.py

Character(models.Model):
    name = models.CharField(max_length=255,unique=True)
    age = models.PositiveIntegerField(default=0)
    gender = models.CharField(max_length=20,choices=creation_choices.GENDERS)
    race = models.CharField(max_length=500,choices=creation_choices.RACE)

Creation_choices.py

GENDERS = (
    ('male',"Male"),
    ("female","Female"),
    ("unknown","Unknown"),
)
RACE = (
    ('human','Human'),
    ('elf','Elf'),
    ('dwarf','Dwarf'),
)

Что я пытаюсь сделать, так это добавить возможность пользователям выбирать случайное значение, и оно возвращает одно из других значений. Я пробовал много разных методов, но большинство из них вернуло ошибку. Когда я создал функцию с random.choice () и протолкнул ее, казалось, что она работает, но по какой-то причине всегда возвращала одно и то же значение.

Любая помощь будет принята с благодарностью!


person Jeremy Collier    schedule 10.10.2017    source источник
comment
Вам следует попробовать аргумент choices для FormField вместо ModelField, он более универсален и принимает вызываемый объект для динамической генерации вариантов выбора.   -  person Klaus D.    schedule 10.10.2017
comment
@KlausD. правильно. Добавьте случайную опцию к вариантам выбора соответствующего поля формы и обработайте эту дополнительную опцию в clean_fieldname методе формы.   -  person schwobaseggl    schedule 10.10.2017


Ответы (1)


добавьте (None,'Random') в наборы выбора и в соответствующих полях модели объявите default=select_random_gender и default=select_random_race, а также blank=False, null=False.

объявить эти функции:

def select_random_gender():
    selection = random.choice(GENDERS)[0]
    return selection if selection else select_random_gender()

def select_random_race():
    selection = random.choice(RACE)[0]
    return selection if selection else select_random_race()
person joppich    schedule 10.10.2017