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?
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.
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.
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.
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.
field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")
C'est aussi simple que ça....!