2017-10-10 7 views
0

J'ai choisi mon cerveau en essayant de comprendre cela et maintenant je me tourne vers la communauté pour obtenir de l'aide. J'utilise des modèles pour créer un formulaire dans Django et je veux ajouter une option aléatoire à quelques-uns des choix déroulants.Option aléatoire dans Django Drop Down Form

Voici une idée générale de ce que je travaille avec:

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'), 
) 

Ce que je suis en train de faire est d'ajouter une façon pour les utilisateurs de sélectionner aléatoire et il renvoie l'une des autres valeurs. J'ai essayé beaucoup de méthodes différentes mais la plupart ont renvoyé une erreur. Lorsque j'ai créé une fonction avec random.choice() et poussé à travers cela semblait fonctionner, mais pour une raison quelconque toujours retourné la même valeur.

Toute aide serait grandement appréciée!

+0

Vous devriez essayer l'argument 'choices' au FormField au lieu du ModelField, il est plus polyvalent et accepte un appelable pour générer les choix dynamiquement. –

+0

@KlausD. est correct. Ajoutez une option "random" aux choix du champ de formulaire correspondant, et traitez cette option supplémentaire dans la méthode 'clean_fieldname' du formulaire. – schwobaseggl

Répondre

0

ajouter (None,'Random') à des ensembles de choix et sur le modèle des champs en question et déclare default=select_random_genderdefault=select_random_race ainsi que blank=False, null=False.

déclarent ces fonctions:

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()