Link Search Menu Expand Document

Кастомизация админки

Подробная информация про кастомизацию админки

Стандартный шаблон для отрисовки админки лежит тут: /venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/base_site.html

Если мы хотим внести изменения в этот шаблон, то необходимо создать новый файл base_site.html в папке mysite/templates/admin. Если мы создадим файл в этой папке, то Django будет использовать именно его при отрисовки админки.

Для вставки дополнительных стилей в админку нам необходимо в файл base_site.html добавить блок {% block extrastyle %}{% endblock %}. Также нам потребуется создать новый файл стилей admin.css в папке /mysite/mysite/static/css.

Таким образом нам нужно будет добавить в файл base_site.html следующий блок:

{% load static %}
{% block extrastyle %}
<link rel="stylesheet" href="{% static 'css/admin.css'%}">
{% endblock %}

Указываем нужные заголовки в Title и в звголовке админки

Для этого нужно в файле /news/admin.py добавить строки:

admin.site.site_title = 'Управление новостями'
admin.site.site_header = 'Управление новостями'

Добавляем изображение к списку новостей в админке

Для этого мы в файле admin.py добавим метод классу NewsAdmin:

def get_photo(self, obj):
    if obj.photo:
        return mark_safe(f'<img src="{obj.photo.url}" width="75">')

get_photo.short_description = 'Миниатюра'  # название для колонки в админке

и добавим вызов этого метода в параметр list_display этого же класса:

list_display = ('id', 'title', 'category', 'created_at', 'updated_at', 'is_published', 'get_photo')

Не забудем импортировать функцию mark_safe:

from django.utils.safestring import mark_safe

Добавляем изображение при просмотре страницы конкретного объекта

Подробнее можно прочитать тут

Для этого мы в файле admin.py добавим параметры классу NewsAdmin:

fields = ('title', 'category', 'content', 'photo', 'get_photo', 'is_published', 'views',  'created_at', 'updated_at')
readonly_fields = ('get_photo', 'views',  'created_at', 'updated_at')
ПараметрОписание
fieldsПоля, которые мы выводим в админке
readonly_fieldsПоля которые мы выводим в админке без возможности редактировать. Это также необходимо для вывода полей которые не могут быть редактируемыми и без указания их в этом поле Django выведет ошибку ValueError