2009-08-26 2 views

risposta

71

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.

+0

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

+0

qualsiasi idea del motivo per cui ottengo '__init __() ottenuto un argomento di parole chiave inattese campo1' – dashesy

14

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.

+2

Per quale versione di Django funziona?Non sembra funzionare per me nella versione 1.8. – BudgieInWA

+0

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

6

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.

+6

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

-1

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

1

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.