9
votes

Comment définir des choix en dynamique avec Django Choicefield?

Je veux définir des choix en dynamique.

J'ai utilisé __set_choices méthode mais, lorsque la méthode de requête est la méthode, La méthode is_valid renvoie toujours FALSE. P>

if request.method=='POST':
 _form = MyForm(request.POST)
 if _form.is_valid():
   #something to do


1 commentaires

Quelle est la "méthode __set_choices"? Qu'est ce que ça fait? Qu'est-ce qui l'appelle? Quelle est votre forme?


4 Réponses :


23
votes

Je reçois souvent les choix de manière dynamique dans le constructeur:

class MyForm(BaseForm):
    afield = forms.ChoiceField(choices=INITIAL_CHOICES)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['afield'].choices = my_computed_choices


1 commentaires

Merci, belle solution, facile à mettre en œuvre aussi.



-1
votes

Semblable à la solution de Maersu, mais si vous avez un modelForm avec un modèle qui a une fourchette à un autre modèle, vous voudrez peut-être attribuer au query de champ au lieu de choix.


0 commentaires

3
votes

La clé consiste à réaliser que choisies peut être n'importe quel appareil: xxx

ou quelle que soit la logique que vous aimez à l'intérieur my_choices .


0 commentaires

2
votes

Dans une vue, vous pouvez faire ce que vous pouvez effectuer les suivants

- vues.py xxx

où lstchoices est la liste des tuples générés dynamiquement pour vos choix.


1 commentaires

Ouais, mais ensuite la validation échoue encore. (Django 1.8)