Атрибут fields
Атрибут fields класса ModelAdmin применяется для управления порядком и составом полей на формах добавления и изменения записей в административной панели Django. Этот атрибут принимает кортеж или список, содержащий имена полей модели, которые будут отображаться на странице редактирования. Порядок полей в списке определяет их порядок отображения на форме. Если атрибут не указан, Django автоматически отображает все поля модели, кроме первичного ключа, в порядке их объявления.
Синтаксис
class YourModelAdmin(admin.ModelAdmin):
fields = ('field1', 'field2', 'field3')
Пример
Рассмотрим базовое использование атрибута fields на примере модели Article. Определим, какие поля будут отображаться на форме редактирования:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
fields = ('title', 'content', 'status', 'created_at')
В результате на странице добавления и редактирования статьи будут отображаться только указанные поля в заданном порядке. Поля, не включенные в список, не будут отображаться на форме.
Пример
Атрибут fields позволяет управлять порядком отображения полей. Например, переместим поле status в начало формы:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
fields = ('status', 'title', 'content', 'created_at')
Теперь поле status будет отображаться первым на форме редактирования, что удобно, если это поле часто используется при работе с записями.
Пример
Атрибут fields также может включать поля, связанные через отношения, используя синтаксис с двойным подчеркиванием. Однако важно помнить, что для работы с такими полями необходимо определить их в readonly_fields или использовать методы. Рассмотрим пример:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
fields = ('title', 'content', 'author__username')
readonly_fields = ('author__username',)
def get_author_username(self, obj):
return obj.author.username
get_author_username.short_description = 'Author Username'
В этом примере мы добавили на форму поле author__username, которое отображает имя пользователя автора. Для корректной работы это поле добавлено в readonly_fields.
Пример
Если необходимо скрыть поле из формы, достаточно не включать его в список fields. Например, скроем поле created_at:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
fields = ('title', 'content', 'status')
В результате на форме редактирования не будет отображаться поле created_at, что полезно, если значение этого поля устанавливается автоматически и не требует редактирования администратором.
Смотрите также
-
атрибут
fieldsets,
который позволяет группировать поля и управлять их отображением на форме -
атрибут
exclude,
который исключает указанные поля из формы редактирования -
атрибут
readonly_fields,
который делает поля доступными только для чтения -
атрибут
list_display,
который определяет поля для отображения в списке записей