sto usando qualcosa di simile:Django, ModelChoiceField() e valore iniziale
field1 = forms.ModelChoiceField(queryset=...)
Come posso fare il mio modulo di mostrare il valore come selezionato?
sto usando qualcosa di simile:Django, ModelChoiceField() e valore iniziale
field1 = forms.ModelChoiceField(queryset=...)
Come posso fare il mio modulo di mostrare il valore come selezionato?
Se si desidera impostare il valore iniziale predefinito, è necessario definire initial
come gli altri campi modulo ad eccezione di set it to the id instead.
Dire che hai field1
come questo:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all())
allora avete bisogno di impostare iniziale, quando si crea il modulo come questo:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
piuttosto che:
form = YourForm(initial = {'field1': instance_of_mymodel })
Suppongo anche che tu abbia definito __unicode__
per i tuoi modelli in modo che questo disp giace correttamente.
Si può semplicemente utilizzare
field1 = forms.ModelChoiceField(queryset=..., initial=0)
per fare il primo valore selezionato, ecc È il modo più generico, poi l'altra risposta.
Per quale versione di Django funziona?Non sembra funzionare per me nella versione 1.8. – BudgieInWA
Ho verificato dal [codice sorgente] (https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130) e ho verificato personalmente che funziona per 'django> = 1.8'. Credo che questo dovrebbe funzionare per tutte le versioni incluso '> = 1.4' – Yeo
I tempi sono cambiati:
Il valore predefinito valore iniziale può essere impostata attraverso la definizione di initial
come gli altri campi del modulo tranne lo si imposta per l'id, invece.
Ora questo sarà sufficiente:
form = YourForm(initial = {'field1': instance_of_mymodel })
Sebbene sia ancora lavoro.
Si prega di specificare quale versione di Django stai usando ora che" i tempi sono cambiati ". Modificato per alcuni potrebbe essere l'aggiornamento a 1.2 ... – scoopseven
Si potrebbe fare anche questo:
form = YourForm(initial = {'field1': pk })
se si sta analizzando la chiave primaria attraverso una stringa di query o tramite una chiamata AJAX senza bisogno di un esempio, il set di query è già gestito che per la goccia verso il basso, gli indici pk lo stato che si desidera
il codice
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
e
form = YourForm(initial = {'field1': instance_of_mymodel })
o iniziale campo direttamente seguente:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
Tutti i lavori.
I primi due modi sostituiranno l'ultimo modo.
Non so cosa fosse la versione al momento della stesura di questo documento, ma questa domanda è ora un po 'obsoleta. In Django 1.5, al momento della scrittura, entrambi questi metodi avrebbero funzionato. – JcKelley
qualsiasi idea del motivo per cui ottengo '__init __() ottenuto un argomento di parole chiave inattese campo1' – dashesy