champs d'id brut: comment afficher un nom au lieu d'un id?

personnaliser un panneau D'administration Django, j'utilise raw_id_fields pour sélectionner une clé étrangère à partir d'un modèle qui a des milliers d'éléments, parce que le menu déroulant par défaut de select-box n'est pas pratique avec autant d'éléments.

ça marche mais ça montre l'id comme on peut le voir sur cette image: enter image description here

y a-t-il un moyen de montrer le nom ou un autre champ à la place de l'id? Ou, est-il un meilleur moyen d'atteindre ce que l'aide de raw_id_fields?

ce est mon code 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)

admin.py:

class StructureAdmin(tree_editor.TreeEditor):
    search_fields = ('name',)
    raw_id_fields = ('parent',)
15
demandé sur Community 2013-03-04 00:05:10

3 réponses

j'ai aussi fait des recherches et je ne pense pas que ce soit possible. Je pense que le mieux que vous pouvez faire, c'est afficher l'unicode du champ à côté de la crue champ id: http://djangosnippets.org/snippets/2108/

alternativement, vous pouvez afficher l'unicode et un lien vers la page de changement d'administrateur correspondant à la valeur:http://djangosnippets.org/snippets/2217/

6
répondu nofinator 2013-03-19 21:50:54
https://github.com/lincolnloop/django-salmonella

est-ce que vous voulez:

(copié à partir de la doc):

Utilisation

from salmonella.admin import SalmonellaMixin

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

vous pouvez utiliser les widgets de Salmonella dans un filtre D'administration bien:

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

class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin):
   list_filter = (
       ('salmonella_fk', SalmonellaFilter),
   )
3
répondu Saze 2017-01-19 12:57:06

Pour la représentation d'un objet à utiliser __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)

en Python 3 Utilisez

def __str__(self):
0
répondu Glyn Jackson 2015-09-11 20:48:20