Как изменить метку в 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']
Вы можете изменить описание заголовков несколькими различными способами. "Описание" означает заголовки таблиц представления списка администратора.
Посмотрите:
В ней описано несколько методов настройки заголовков в представлении отображения списка на страницах администратора.
Вы можете создавать пользовательские колонки.
Например, есть 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 и значения полей "имя" и "возраст" , как показано ниже:
Конечно, вы можете назначить поля "имя" и "возраст" 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 и значения полей "имя" и "возраст" , как показано ниже: