2013-03-03 13 views
13

Personalizzando un pannello di amministrazione di Django, sto utilizzando raw_id_fields per selezionare una chiave esterna da un modello che contiene migliaia di elementi, perché il menu a discesa di selezione predefinita della casella è scomodo con così tanti elementi.raw_id_fields: come mostrare un nome invece di id?

Funziona ma dimostra l'id come si può vedere in questa immagine: enter image description here

C'è un modo per mostrare il nome o altro campo anziché l'id? Oppure, c'è un modo migliore per farlo, rispetto all'utilizzo di raw_id_fields?

Grazie!

**** **** Aggiornamento

Questo è il mio codice in models.py:

class Structure(MPTTModel): 
    name = models.CharField(max_length=200, unique=True, verbose_name = _('name')) 
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', verbose_name = _('parent')) 

    def __unicode__(self): 
     return u"%s" % (self.name) 

In admin.py:

class StructureAdmin(tree_editor.TreeEditor): 
    search_fields = ('name',) 
    raw_id_fields = ('parent',) 
+0

http://stackoverflow.com/questions/2809122/how-to-show-raw-id-value-of-a-manytomany-relation-in-the-django-admin – catherine

+0

se vuoi semplicemente sbarazzarti di enormi dati, il caricamento e la modifica non sono necessari, usa 'readonly_fields = ('parent',)'. – Ali

risposta

0

Per la rappresentazione di un uso dell'oggetto __unicode__

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 

    def __unicode__(self): 
     return u'%s %s' % (self.first_name, self.last_name) 

In Python 3 utilizzare

def __str__(self): 
+0

Grazie per la risposta. Ho già usato __unicode__. Ho aggiornato la domanda con il codice che ho usato nel mio modello. Forse mi sono perso qualcosa ... –

+0

è 'Struttura' la tua tabella FK? hai bisogno di unicode sul modello FK. –

+0

Sì, è un TreeForeignKey a se stesso: 'parent = TreeForeignKey ('self', [...])' –

3

Ho anche ricercato questo e non credo sia possibile. Credo che la cosa migliore che puoi fare è visualizzare l'unicode del campo accanto al campo id grezzo: http://djangosnippets.org/snippets/2108/

In alternativa, è possibile visualizzare l'unicode e un link alla pagina corrispondente cambiamento di amministrazione del valore di: http://djangosnippets.org/snippets/2217/

+0

Grazie per la risposta. Ho provato l'ultimo snippet, ma mostra solo l'unicode e il collegamento quando salvi la struttura e lo apro di nuovo. Sai come posso mostrare lo stesso ma quando scelgo il raw_id? –

+0

@ A.Vila Sto avendo lo stesso comportamento, hai altre alternative? – elsadek

3

E ' sembra che questo plugin: https://github.com/lincolnloop/django-salmonella

fa ciò che si vuole:

(copiato dal documento):

Uso

per iniziare a usare django-salmonella nell'applicazione tutto quello che dovete fare è implementare SalmonellaMixin nella classe ModelAdmin e aggiungere i campi desiderati a un elenco di salmonella_fields:

from salmonella.admin import SalmonellaMixin 

class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin): 
    salmonella_fields = ('user',) 

È possibile utilizzare i widget Salmonella in un Admin filtrare così:

from salmonella.admin import SalmonellaMixin 
from salmonella.filters import SalmonellaFilter 

class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin): 
    list_filter = (
     ('salmonella_fk', SalmonellaFilter), 
    ) 
+0

Funziona bene per me. –

Problemi correlati