2009-08-20 7 views

risposta

15

È possibile ottenere il campo in questo modo:

myfield = MyModel._meta.get_field_by_name('field_name') 

e il valore predefinito è solo un attributo del campo:

myfield.default 
+0

Tutto ciò con un _ sta scavando nelle parti interne. Vedi la mia domanda: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –

+9

Oggigiorno il metodo 'get_field_by_name' restituisce una tupla con l'oggetto campo come primo elemento. – Adam

+0

@PaulTarjan hai ragione, ma il '_meta' è uno di quegli elementi ben collaudati, non troppo probabili da cambiare. Il consenso generale è che è OK accedere direttamente a '_meta' di un modello. –

35
TheModel._meta.get_field('the_field').get_default() 
+2

Questa dovrebbe essere la risposta corretta ora. – Teekin

0

Se avete bisogno i valori predefiniti per più di un campo (ad esempio in una sorta di fase di reinizializzazione) potrebbe valere la pena di istanziare un nuovo oggetto temporaneo del modello e utilizzare i valori del campo da quell'oggetto.

temp_obj = MyModel() 
obj.field_1 = temp_obj.field_1 if cond_1 else 'foo' 
... 
obj.field_n = temp_obj.field_n if cond_n else 'bar' 

Ovviamente ne vale la pena, se l'oggetto temporaneo può essere costruito senza ulteriori problemi di prestazioni/dipendenze.

9

Come di Django 1.9.x si possono utilizzare:

field = TheModel._meta.get_field('field_name') 
default_value = field.get_default()