2012-08-28 19 views
28

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

risposta

3

Penso che si sta cercando get_fieldname_display() funzione.

34

Certo, basta accedere all'attributo choice di un campo Modello.

MyModel._meta.get_field('foo').choices 
my_instance._meta.get_field('foo').choices 
+0

E se volevo che i miei modelli di Django? –

+1

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. –

+0

perfetto! Esattamente quello che ho cercato di cercare nella sorgente lol .. – Amyth

4

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

+0

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? –

+1

@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]'. –

Problemi correlati