Администратор модели (ModelAdmin) - это класс, который определяет, как модель будет отображаться и какие действия можно выполнять с ней в административной панели Django. Он позволяет настраивать внешний вид и поведение модели в административной панели.

Атрибуты, которые мы можем настроить внутри класса администратора:

  1. list_display - список полей, которые отображаются на странице списка объектов модели в административной панели.

    Если поле является ForeignKey, Django отобразит __str()__ связанного объекта.

    list_display = ('field1', 'field2', 'field3')
  2. list_display_links - определяет, какое поле или поля будут использоваться в качестве ссылок для редактирования объектов на странице списка. Если вы установите list_display_links, поля, указанные в этом параметре, будут представлять собой активные ссылки на страницу редактирования объекта.

    list_display_links = ('field1',)
  3. ordering - порядок сортировки объектов на странице списка.

    ordering = ('-field1', 'field2')
  4. list_editable - список полей, которые можно редактировать прямо на странице списка.

    list_editable = ('field1', 'field2')
  5. list_per_page - количество объектов, отображаемых на одной странице списка. Этот параметр позволяет настроить количество объектов, которые будут отображаться на странице списка, что может быть полезно при работе с большими объемами данных.

    list_per_page = 50
  6. list_filter - список полей, по которым можно фильтровать объекты на странице списка.

    list_filter = ('field1', 'field2')
  7. search_fields - список полей, по которым можно выполнять поиск объектов.

    search_fields = ('field1', 'field2')
  8. readonly_fields - определяет список полей, которые будут отображаться только для чтения на странице редактирования объекта. Это может быть полезно для полей, которые не должны редактироваться в административной панели.

    readonly_fields = ('created_at', 'updated_at')
  9. list_select_related - определяет, какие связанные объекты будут предварительно загружены вместе с основными объектами на странице списка. Это может уменьшить количество запросов к базе данных, если вы хотите отобразить информацию о связанных объектах.

    list_select_related = ('foreign_key_field',)
  10. actions - Django позволяет писать и регистрировать “действия” - функции, которые вызываются с помощью списка объектов, выбранных на странице списка изменений. Документация.

    actions = ['custom_action']
  11. exclude - исключает указанные поля из отображения на странице редактирования объекта.

    exclude = ('field1', 'field2')
  12. save_on_top - дублирует блок кнопок “Сохранить” наверху страницы редактирования объекта.

    save_on_top = True
  13. prepopulated_fields - определяет поля, для которых значение будет автоматически создаваться на основе значений других полей - крутая штука!) работает с кириллицей.

    prepopulated_fields = {'slug': ('title',)}
  14. filter_horizontal и filter_vertical - отображает в виде горизонтального или вертикального списка на странице редактирования объекта связанные ManyToMany объекты.

    filter_horizontal = ('tags',)

    или

    filter_vertical = ('tags',)
  15. inlines - добавляет связанные объекты, которые будут отображаться на странице редактирования объекта.

    from django.contrib import admin
    from .models import Post, Category
     
    class PostInline(admin.TabularInline):  # или admin.StackedInline для другого вида отображения
    	model = Post
    	extra = 0  # количество дополнительных форм для добавления объектов
     
    @admin.register(Category)
    class CategoryAdmin(admin.ModelAdmin):
    	inlines = [PostInline]

Чтобы настроить названия полей в админ-панели, используем опцию verbose_name в атрибутах модели:

class Category(models.Model):
    title = models.CharField(..., **verbose_name='Название категории'**)
    ...

〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰