Атрибут fieldsets

Атрибут fieldsets применяется в классе ModelAdmin для кастомизации отображения формы редактирования модели в административной панели Django. С помощью этого атрибута можно разбивать поля модели на логические группы, каждая из которых может иметь свой заголовок, а также специальные опции отображения, такие как коллапс или классы CSS. Атрибут представляет собой кортеж кортежей или список списков, где каждый элемент описывает отдельную секцию.

Синтаксис

pythonclass MyModelAdmin(admin.ModelAdmin):
  fieldsets = (
    (None, {
      'fields': ('field1', 'field2')
    }),
    ('Section title', {
      'fields': ('field3', 'field4'),
      'classes': ('collapse',),
      'description': 'Optional description'
    }),
  )

Пример

Предположим, у нас есть модель Article с полями для заголовка, содержимого, статуса и дат создания и публикации. Сгруппируем их в секции для лучшей организации в админке:

pythonfrom django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  fieldsets = (
    (None, {
      'fields': ('title', 'content')
    }),
    ('Status and Dates', {
      'fields': ('status', 'created_at', 'published_at'),
      'classes': ('collapse',),
      'description': 'Manage status and publication dates'
    }),
  )

Результат выполнения кода:

python"ArticleAdmin form displayed with two sections: basic fields and status/dates"

Пример

Атрибут fieldsets позволяет гибко настраивать отображение полей, включая поля отношений и встроенные формы. Рассмотрим пример с моделью, содержащей внешний ключ и поле для связи многие-ко-многим:

pythonfrom django.contrib import admin
from .models import Category, Tag, Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  fieldsets = (
    (None, {
      'fields': ('title', 'content', 'category', 'tags')
    }),
    ('Advanced options', {
      'fields': ('is_published', 'published_at'),
      'classes': ('collapse', 'wide'),
    }),
  )

Результат выполнения кода:

python"Fields category and tags are displayed as select widgets in the first section"

Смотрите также

  • атрибут fields,
    который определяет простой список полей для отображения
  • атрибут exclude,
    который исключает поля из формы редактирования
  • атрибут readonly_fields,
    который делает поля доступными только для чтения
  • атрибут list_display,
    который определяет поля для отображения в списке записей