Как изменить метку в display_list поля в модели в django admin

У меня есть модель с некоторыми полями, имеющими название verbose_name. Это многословное имя подходит для страницы редактирования администратора, но определенно слишком длинное для страницы списка.

Как установить метку, которая будет использоваться на странице администратора list_display?

Возможно, вы используете verbose_name неправильно, и вам следует использовать help_text=… [Django-doc] вместо этого:

from django.db import models


class MyModel(models.Model):
    name = models.CharField(
        max_length=64,
        help_text='here some long help text that this is about filling in the name',
    )

Если вы действительно хотите использовать другой для list_display, вы можете работать со свойством, например:

from django.contrib import admin
from django.db import models


class MyModel(models.Model):
    name = models.CharField(
        max_length=64,
        verbose_name='Long name for name field',
    )

    @property
    @admin.display(description='Short name', ordering='name')
    def name_display(self):
        return self.name

    @name_display.setter
    def name_display(self, value):
        self.name = value

Затем в ModelAdmin вы используете name_display:

from django.contrib import admin


@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = ['name_display']

Вы можете изменить описание заголовков несколькими различными способами. "Описание" означает заголовки таблиц представления списка администратора.

Посмотрите:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

В ней описано несколько методов настройки заголовков в представлении отображения списка на страницах администратора.

Вы можете создавать пользовательские колонки.

Например, есть Person модель ниже:

# "models.py"

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)
    age =  models.IntegerField()

Теперь вы можете создать пользовательские столбцы "my_name" и "my_age" с помощью my_name() и my_age() и переименовать их с помощью @admin.display. как показано ниже:

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("my_name", "my_age") 
                  # "my_name" and "my_age" need to be assigned

    @admin.display(description='My name')
    def my_name(self, obj):      # ↑ Displayed
        return obj.name

    @admin.display(description='My age')
    def my_age(self, obj):       # ↑ Displayed
        return obj.age

Затем отобразятся MY NAME, MY AGE и значения полей "имя" и "возраст" , как показано ниже:

enter image description here

Конечно, вы можете назначить поля "имя" и "возраст" list_display в дополнение к пользовательским столбцам "my_name" и "my_age" , как показано ниже:

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("my_name", "my_age", "name", "age") 
                                          # ↑ Here ↑

    @admin.display(description='My name')
    def my_name(self, obj):
        return obj.name

    @admin.display(description='My age')
    def my_age(self, obj):
        return obj.age

Затем отображаются NAME, AGE и значения полей "имя" и "возраст" , как показано ниже:

enter image description here

Вернуться на верх