Django, ModelChoiceField() en beginwaarde

Ik gebruik zoiets als dit:

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

Hoe kan ik ervoor zorgen dat mijn formulier de a-waarde toont zoals geselecteerd?


Antwoord 1, autoriteit 100%

Als u de standaard beginwaarde wilt instellen, moet u definiëren initialzoals andere formuliervelden, behalve u stel het in plaats daarvan in op de id.

Stel dat je field1als volgt hebt:

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

dan moet je de initialen instellen wanneer je je formulier als volgt maakt:

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

in plaats van:

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

Ik neem ook aan dat je __unicode__voor je modellen hebt gedefinieerd, zodat dit correct wordt weergegeven.


Antwoord 2, autoriteit 25%

Je kunt gewoon

. gebruiken

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

om de eerste waarde te selecteren enz. Het is een meer algemene manier dan het andere antwoord.


Antwoord 3, autoriteit 10%

De tijden zijn veranderd:

De standaard beginwaarde kan nu worden ingesteld door initialte definiëren zoals andere formuliervelden behalve dat u deze in plaats daarvan op de id instelt.

Dit is nu voldoende:

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

Hoewel beide nog steeds werken.


Antwoord 4, autoriteit 4%

De code

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

en

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

of eerste veld direct volgend:

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

Alles werkt.

De eerste twee manieren hebben voorrang op de laatste.


Antwoord 5, autoriteit 2%

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

Zo simpel is het…!


Antwoord 6

U zou dit ook kunnen doen:

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

als u uw primaire sleutel ontleden via een queryreeks of via een ajax-aanroep, geen instantie nodig, de queryset heeft dat al afgehandeld voor uw vervolgkeuzelijst, de pk indexeert de gewenste status

Other episodes