fields
Атрибут ModelAdmin.fields позволяет настраивать расположение и отображение полей в формах добавления (“add”) и изменения (“change”) объекта модели в админ-панели.
-
Синтаксис: Укажите список имен полей, которые необходимо показать на форме.
class FlatPageAdmin(admin.ModelAdmin): fields = ("url", "title", "content") -
Порядок: Порядок перечисления полей в списке
fieldsсоответствует их порядку отображения в форме. -
Группировка: Чтобы отобразить несколько полей в одной строке, объедините их в кортеж.
class FlatPageAdmin(admin.ModelAdmin): fields = (("url", "title"), "content") -
Принимаемые значения: Опция fields принимает те же типы значений, что и
list_display, за исключением того, что callable-объекты не принимаются. Имена методов модели и администратора модели будут использоваться только в том случае, если они перечислены вreadonly_fields. -
Обязательно должны быть перечислены поля, которые не могут принимать значение null и не имеют значения по умолчанию.
exclude
Атрибут ModelAdmin.exclude позволяет указать, какие поля модели не должны быть включены в формы добавления (“add”) и редактирования (“change”) в админ-панели, другими словами, исключает указанные поля из этих форм.
-
Синтаксис: Укажите в
excludeсписок названий полей, которые нужно исключить из формы.class AuthorAdmin(admin.ModelAdmin): exclude = ("birth_date",)
Использование вместе с fields - ****exclude и fields взаимоисключают друг друга. При перечислении одних и тех же полей в fields и exclude - будет вызвана ошибка.
readonly_fields
Атрибут ModelAdmin.readonly_fields предназначен для отображения определенных полей модели в режиме “только чтение” на страницах добавления и редактирования объектов в админ-панели.
Синтаксис: Атрибут readonly_fields может содержать список или кортеж полей.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
readonly_fields = ('time_create', 'time_update')Ключевые особенности
- Не редактируемые поля: Поля, указанные в
readonly_fields, отображаются как обычный текст, без возможности редактирования их содержимого. - Исключение из ModelForm: Такие поля исключаются из
ModelForm, которая генерирует форму. Это предотвращает отправку изменений для этих полей при сохранении формы. - Поддержка функций (callables): В
readonly_fieldsможно указывать имена методов модели илиadmin.display. Это позволяет отображать значения, вычисляемые на лету.
Примечания
- Порядок: Если вы используете
readonly_fieldsвместе сfieldsилиfieldsets, то поля изreadonly_fieldsдолжны быть также включены в эти атрибуты, чтобы они отображались на форме. - Позиционирование: Если
readonly_fieldsиспользуется безfieldsилиfieldsets, то поля “только чтение” размещаются после всех редактируемых полей формы.
prepopulated_fields
Атрибут ModelAdmin.prepopulated_fields позволяет автоматически заполнять определённые поля на основании значений других полей модели. Часто он используется для автогенерации slug полей (типа SlugField).
Как работает:
-
Вы определяете
prepopulated_fieldsкак словарь вида:prepopulated_fields = {"slug": ("title",)}Это означает: “Автоматически сгенерировать и заполнить поле ‘slug’ на основе значения поля ‘title’.”
-
Django включает небольшой JavaScript код, выполняющий автозаполнение.
-
Поле, которое будет автоматически заполняться, должно быть редактируемым (то есть его нельзя указывать в
readonly_fields).
Warning
Обратите внимание, что предзаполненные поля не изменяются JavaScript после сохранения значения. Обычно не желательно, чтобы слаги менялись после сохранения (что приведет к изменению URL-адреса объекта, если слаг используется в нем).
prepopulated_fields не работает с полями следующих типов:
DateTimeFieldForeignKeyOneToOneFieldManyToManyField
Альтернативные варианты автоматического создания слага, рассмотрены здесь.
filter_horizontal / filter_vertical
По умолчанию поля ManyToManyField отображаются как множественный выбор (<select multiple>).
filter_horizontal меняет этот интерфейс на более удобный в случае большого количества опций. Фильтр отображает два поля - выбранные и не выбранные - горизонтально, друг рядом с другом. Между ними находятся кнопки для добавления/удаления вариантов. Кроме того, есть поле поиска для быстрого сужения списка опций.
filter_vertical аналогично filter_horizontal используется для полей типа ManyToManyField, но визуально отличается. Поля для выбранных и не выбранных элементов расположены вертикально друг над другом. Механизм взаимодействия тот же, что и в filter_horizontal (кнопки “добавить”/“убрать” и поиск).
Warning
Если используется
fields, то поля, перечисленные в атрибутахfilter_horizontalилиfilter_verticalтакже должны быть указаны вfields, иначе они не будут отображаться в форме.
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰