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
не работает с полями следующих типов:
DateTimeField
ForeignKey
OneToOneField
ManyToManyField
Альтернативные варианты автоматического создания слага, рассмотрены здесь.
filter_horizontal
/ filter_vertical
По умолчанию поля ManyToManyField отображаются как множественный выбор (<select multiple>
).
filter_horizontal
меняет этот интерфейс на более удобный в случае большого количества опций. Фильтр отображает два поля - выбранные и не выбранные - горизонтально, друг рядом с другом. Между ними находятся кнопки для добавления/удаления вариантов. Кроме того, есть поле поиска для быстрого сужения списка опций.
filter_vertical
аналогично filter_horizontal
используется для полей типа ManyToManyField, но визуально отличается. Поля для выбранных и не выбранных элементов расположены вертикально друг над другом. Механизм взаимодействия тот же, что и в filter_horizontal
(кнопки “добавить”/“убрать” и поиск).
Warning
Если используется
fields
, то поля, перечисленные в атрибутахfilter_horizontal
илиfilter_vertical
также должны быть указаны вfields
, иначе они не будут отображаться в форме.
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰