Ho un modello Django con alcuni campi con valori predefiniti specificati. Sto cercando di prendere il valore predefinito per uno di questi campi per noi più avanti nel mio codice. C'è un modo semplice per prendere il valore predefinito di un particolare campo da un modello?Come si ottiene il valore predefinito per un campo in un modello Django?
21
A
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
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()
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 –
Oggigiorno il metodo 'get_field_by_name' restituisce una tupla con l'oggetto campo come primo elemento. – Adam
@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. –