16

Вопрос по python, django-admin, django – raw_id_fields: как показать имя вместо id?

Настраивая панель администратора Django, ям используюraw_id_fields выбрать ForeignKey из Модели, которая имеет тысячи элементов, потому что раскрывающийся список выбора по умолчанию неудобен с таким количеством элементов.

Это работает, но показывает идентификатор, который можно увидеть на этом изображении:

Есть ли способ показать имя или другое поле вместо идентификатора? Или есть ли лучший способ сделать это, чем использовать?raw_id_fields

Это мой код в: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',)

<span>если вы просто хотите избавиться от огромных данных, загрузка и редактирование не нужны, используйте .I &#39;<code>readonly_fields = ('parent', )</code></span>

Dec 03, 2013, 11:21 AMотAli

<span><a href="http://stackoverflow.com/questions/2809122/how-to-show-raw-id-value-of-a-manytomany-relation-in-the-django-admin">stackoverflow.com/questions/2809122/...</a></span>

Mar 20, 2013, 3:08 AMотcatherine

4ответа

1

Вdjango2.1 ты можешь использоватьautocomplete_fields, Это будет работать так же, как ajax select2.

Вadmin.py

class StructureAdmin(tree_editor.TreeEditor):
    search_fields = ('name',)
    autocomplete_fields = ('parent',)

Ссылка:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields

6

Я также исследовал это, и я нене думаю, что этовозможно. Я думаю, что лучшее, что вы можете сделать, это отобразить юникод поля рядом с необработанным полем id:http://djangosnippets.org/snippets/2108/

Кроме того, вы можете отобразить Unicode и ссылку на значение 'Соответствующая страница смены администратора:http://djangosnippets.org/snippets/2217/

3

Кажется, этот плагин:https://github.com/lincolnloop/django-salmonella

делает то, что вы хотите:

(скопировано из документа):

использование

Чтобы начать использовать django-salmonella в вашем приложении, все, что вам нужно сделать, это реализовать SalmonellaMixin в вашем классе ModelAdmin и добавить нужные поля в список salmonella_fields:

from salmonella.admin import SalmonellaMixin

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

Вы также можете использовать виджеты Salmonella в фильтре Admin:

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

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

Для представления объекта используйте__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)

В Python 3 используют

def __str__(self):

RelatedQuestions