web-dev-qa-db-fra.com

Django, ModelChoiceField () et valeur initiale

J'utilise quelque chose comme ça:

field1 = forms.ModelChoiceField(queryset=...)

Comment puis-je faire en sorte que mon formulaire affiche la valeur a telle que sélectionnée?

52
Asinox

Si vous souhaitez définir la valeur initiale par défaut, vous devez définir initial comme les autres champs du formulaire, sauf vous définissez-le à la place pour l'ID .

Dites que vous avez field1 comme ça:

class YourForm(forms.Form):
    field1 = forms.ModelChoiceField(queryset = MyModel.objects.all() )

alors vous devez définir initial lorsque vous créez votre formulaire comme ceci:

form = YourForm(initial = {'field1': instance_of_mymodel.pk })

plutôt que:

form = YourForm(initial = {'field1': instance_of_mymodel })

Je suppose également que vous avez défini __unicode__ pour vos modèles afin que cela s'affiche correctement.

85
Michael Cheng

Vous pouvez simplement utiliser

 field1 = forms.ModelChoiceField(queryset=..., initial=0) 

pour faire la première valeur sélectionnée, etc. C'est une façon plus générique, puis l'autre réponse.

22
Pavel Shvedov

Les moments où ils ont changé:

La valeur initiale par défaut peut maintenant être définie en définissant initial comme les autres champs du formulaire sauf que vous le définissez à la place id.

Maintenant cela suffira:

form = YourForm(initial = {'field1': instance_of_mymodel })

Bien que les deux fonctionnent toujours.

9
Williams

Le code

form = YourForm(initial = {'field1': instance_of_mymodel.pk })

et

form = YourForm(initial = {'field1': instance_of_mymodel })

ou champ initial suivant directement:

field1 = forms.ModelChoiceField(queryset=..., initial=0) 

Tout le travail.

Les deux premières manières remplaceront la manière finale.

3
field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")

C'est aussi simple que ça....!

0
Faizan Mustafa