2012-08-16 18 views
7

Sto utilizzando ModelForms per creare moduli per un sito Web, ma voglio un maggiore controllo su quale testo viene visualizzato nella casella Seleziona.Etichette per Django selezionare il campo modulo

Un modello esempio potrebbe essere la seguente

class Test(models.Model) 
    ID = IntegerField() 
    Label = CharacterField() 
    recipient = ForeignKey(Person) 
    product = ForeignKey(Product) 

Quindi, il mio problema è che quando faccio un ModelForm di questo modello, i campi di chiave esterna sono realizzati in selezionare i campi, che ha la chiave primaria della l'oggetto nel valore sottostante e il testo visualizzato è il testo dal metodo oggetti __unicode__(). In questo caso, viene visualizzato solo l'ID prodotto (questo è un numero di codice seriale, che non ha senso per l'utente). Mi piacerebbe essere in grado di creare un'etichetta personalizzata come "[seriale], [nome prodotto]".

Non riesco a trovare alcun suggerimento sulla documentazione ufficiale di Django, quindi mi chiedevo se qualcuno avrebbe aiutato? :)

+0

non può cambiare '__unicode__' metodo del modello per mostrare che cosa è previsto? – Rohan

+0

Questa sarebbe la soluzione più ovvia, ma il metodo unicode viene utilizzato molto nel sito Web, dove è importante che mostri solo la serie. Quindi non è un'opzione, temo – Eldamir

risposta

7

Controlla il Django docs regarding the ModelChoiceField. Citazione:

Il metodo del modello __unicode__ sarà chiamato a generare stringa rappresentazioni degli oggetti per l'uso nelle scelte del campo; a fornire rappresentazioni personalizzate, sottoclasse ModelChoiceField e override label_from_instance. Questo metodo riceverà un oggetto modello, e dovrebbe restituire una stringa adatta a rappresentarlo. Per esempio:

class MyModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "My Object #%i" % obj.id 
+0

Sembra qualcosa che potrebbe funzionare. Lo verificherò – Eldamir

+0

Ha funzionato brillantemente. Grazie compagno – Eldamir

Problemi correlati