Атрибут list_editable
Атрибут list_editable применяется к классу ModelAdmin и позволяет указать поля, которые можно редактировать непосредственно в списке объектов. Это удобно для быстрого изменения данных без перехода на страницу редактирования. Поля, перечисленные в этом атрибуте, отображаются в списке как редактируемые поля ввода.
Синтаксис
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'status', 'views')
list_editable = ('status', 'views')
Атрибут list_editable принимает кортеж или список с именами полей, которые должны быть доступны для редактирования в списке объектов.
Важные особенности
При использовании list_editable необходимо учитывать несколько правил:
Поля, указанные в list_editable, должны присутствовать в list_display. Если поле указано в list_editable, но отсутствует в list_display, будет вызвана ошибка.
Первое поле в list_display автоматически становится ссылкой на страницу редактирования. Поэтому это поле не может быть редактируемым. Если вы хотите сделать его редактируемым, используйте атрибут list_display_links для управления ссылками.
Пример
Создадим модель Article и настроим админку так, чтобы в списке можно было редактировать поля status и views:
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
status = models.CharField(max_length=20)
views = models.IntegerField(default=0)
def __str__(self):
return self.title
# admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'status', 'views')
list_editable = ('status', 'views')
Результат выполнения кода:
"В списке объектов появились выпадающий список для status и поле ввода для views"
Пример
Используем атрибут list_display_links для управления ссылками и сделаем поле title редактируемым:
# admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'status', 'views', 'created_at')
list_editable = ('title', 'status')
list_display_links = ('created_at',)
Результат выполнения кода:
"Поля title и status стали редактируемыми, а ссылка на редактирование находится на поле created_at"
Пример
Поля, указанные в list_editable, автоматически проверяются на корректность. Если ввести неверные данные, административная панель покажет ошибку:
# admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'status', 'views')
list_editable = ('status', 'views')
Результат выполнения кода:
"При попытке ввести текст в поле views отобразится ошибка валидации"
Смотрите также
-
атрибут
list_display,
который определяет список полей, отображаемых в списке объектов -
атрибут
list_display_links,
который управляет ссылками на страницу редактирования -
атрибут
list_filter,
который добавляет боковую панель с фильтрами -
атрибут
search_fields,
который добавляет поле для поиска по списку объектов