Esiste un modo (senza utilizzare un modulo) per accedere al valore di "scelte" dei campi del modello?Accesso a field.ch di Django
voglio fare qualcosa di simile field.choices - e ottenere l'elenco dei valori sia in una vista o un modello
Esiste un modo (senza utilizzare un modulo) per accedere al valore di "scelte" dei campi del modello?Accesso a field.ch di Django
voglio fare qualcosa di simile field.choices - e ottenere l'elenco dei valori sia in una vista o un modello
Penso che si sta cercando get_fieldname_display()
funzione.
Certo, basta accedere all'attributo choice
di un campo Modello.
MyModel._meta.get_field('foo').choices
my_instance._meta.get_field('foo').choices
Se stai dichiarando le scelte in questo modo:
class Topic(models.Model):
PRIMARY = 1
PRIMARY_SECONDARY = 2
TOPIC_LEVEL = ((PRIMARY, 'Primary'),
(PRIMARY_SECONDARY, 'Primary & Secondary'),)
topic_level = models.IntegerField('Topic Level', choices=TOPIC_LEVEL,
default=1)
che è un buon modo di farlo davvero. Vedi: http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/
allora si può ottenere indietro le scelte semplicemente con Topic.TOPIC_LEVEL
Sono in questo modo a mio avviso, ma invece di ottenere 'Primaria, Primaria e Secondaria' (come dovrebbe essere, nell'esempio precedente) ottengo' (PRIMARY, 'Primary'), (PRIMARY_SECONDARY, 'Primary & secondaria ') '. Perché è così e come risolverlo? –
@LjubisaLivac Il motivo è che hai dichiarato la variabile 'TOPIC_LEVEL' come tupla di coppie' (valore_database, 'valore_valore') 'e ora la stai recuperando esattamente come hai inserito. Ci sono molti vantaggi nel farlo, uno dei quali è la leggibilità alla prossima persona che gestisce il tuo codice. Questo non è rotto: molte applicazioni preferiscono avere il valore reale del database invece di quello che dovrebbe essere letto dagli umani. Se vuoi solo le stringhe, puoi recuperarle con '[i [1] per i in Topic.TOPIC_LEVEL]'. –
E se volevo che i miei modelli di Django? –
Tutto ciò che è accessibile nella vista è accessibile nel modello, è sufficiente passarlo nel contesto del modello. Dal momento che questo inizia con un carattere di sottolineatura, dovrai passare manualmente l'istanza del campo al contesto. –
perfetto! Esattamente quello che ho cercato di cercare nella sorgente lol .. – Amyth