Custom Django admin interface.
Project description
paper-admin
Custom Django admin interface.
Requirements
- Python >= 3.6
- Django >= 2.2
Installation
Add paper_admin
to your INSTALLED_APPS setting before django.contrib.admin
.
INSTALLED_APPS = [
'paper_admin',
'paper_admin.patches.dal', # optional
'paper_admin.patches.django_solo', # optional
'paper_admin.patches.mptt', # optional
'paper_admin.patches.logentry_admin', # optional
'paper_admin.patches.post_office', # optional
# ...
'django.contrib.admin',
# ...
]
Patches
Некоторые сторонние библиотеки переопределяют стандартные
шаблоны Django и в рамках интерфейса paper_admin
выглядят инородно. Поэтому приходится применять патчи.
В состав paper_admin
включены следующие патчи:
-
paper_admin.patches.dal
Исправляет стили виджетов django-autocomplete-light -
paper_admin.patches.django_solo
Исправляет хлебные крошки в django-solo. -
paper_admin.patches.mptt
Адаптация django-mptt. Добавляет возможность сортировки узлов дерева (при указании свойстваsortable
). -
paper_admin.patches.logentry_admin
Исправление фильтров и скрытие ненужных кнопок в django-logentry-admin. -
paper_admin.patches.post_office
Исправление виджета списка email адресов в django-post_office
Note: как правило, патчи должны быть указаны в INSTALLED_APPS
до библиотек,
которые они исправляют.
Sort table of content with drag and drop
Для того, чтобы экземпляры модели можно было сортировать в интерфейсе администратора, необходимо выполнить два условия.
- Добавить в модель числовое поле, которое будет хранить порядковый номер.
from django.db import models
class MyModel(models.Model):
order = models.IntegerField(
"order",
default=0,
editable=False # опционально
)
- Указать название поля в свойстве
sortable
. Это работает как с инлайн-формами, так и с подклассамиModelAdmin
.
from django.contrib import admin
class TablularInline(admin.TabularInline):
sortable = 'order'
# ...
class MyModelAdmin(admin.ModelAdmin):
sortable = 'order'
# ...
Tabs
Поля формы можно разделить на вкладки:
class TablularInlines(admin.TabularInline):
tab = 'inlines-tab'
@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
fieldsets = (
(_('First Section'), {
'tab': 'common-tab',
'classes': ('paper-card--info', ),
'description': _('Some fieldset help text'),
'fields': (
# ...
),
}),
(_('Second Section'), {
'tab': 'common-tab',
'fields': (
# ...
)
}),
(_('Links'), {
'tab': 'links-tab',
'fields': (
# ...
)
}),
)
tabs = [
('common-tab', _('General')),
('links-tab', _('Links')),
('inlines-tab', _('Inlines')),
]
inlines = (TablularInlines, )
Colorize table rows
@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
def get_row_classes(self, request, obj):
classes = super().get_row_classes(request, obj)
if obj.status == 'OK':
classes.append('table-success')
return classes
Additional widgets
AdminSwitchInput
Стилизованый чекбокс.
Menu
Меню в сайдбаре настраивается путем заполнения списка
PAPER_MENU
в settings.py
.
PAPER_MENU = [
dict(
label=_('Dashboard'),
url='admin:index',
icon='fa fa-fw fa-lg fa-area-chart',
),
dict(
app='app',
icon='fa fa-fw fa-lg fa-home',
models=[
'Tag',
'Category',
'SubCategory',
]
),
'-',
'auth',
'sites',
]
Каждый элемент списка PAPER_MENU
может быть представлен
одним из четырех видов:
- имя приложения (app_label)
- путь к модели (app_label.model_name)
- словарь
- строка-разделитель ("-")
Доступные ключи для формирования пункта меню с помощью словаря:
label
:str
- заголовок пункта менюurl
:str
- URL или имя URL-шаблона (напримерapp:index
)icon
:str
- CSS-классы иконкиclasses
:str
- CSS-классы пункта менюperms
:str/list/callable
- права, необходимые для отображения пункта. Для определения суперюзера и сотрудников, можно использовать специальные значенияsuperuser
иstaff
.app
:str
- имя приложения. Добавляется к именам моделей вmodels
.models
:list/dict
- дочерние пункты меню. Может содержать имена моделей или пункты меню.
Пример 1. Собственный пункт меню.
from django.urls import reverse_lazy
PAPER_MENU = [
dict(
app="app",
icon="fa fa-fw fa-lg fa-home",
models=[
dict(
label=_("Index"),
url=reverse_lazy("admin:app_list", kwargs={
"app_label": "app"
})
),
"Tag",
"Category",
]
)
]
Пример 2. Отображение пункта модели только при наличии указанных прав.
PAPER_MENU = [
dict(
app="app",
icon="fa fa-fw fa-lg fa-home",
models=[
"Tag",
dict(
label=_("Category"),
url="admin:app_category_changelist",
perms=["app.add_category", "app.view_category"]
),
]
)
]
Settings
Option | Description | Example value |
---|---|---|
PAPER_ENVIRONMENT_NAME |
Текст на плашке текущего окружения | 'development' |
PAPER_ENVIRONMENT_COLOR |
Цвет фона плашки текущего окружения | '#FFFF00' |
PAPER_MENU |
Меню в сайдбаре |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for paper_admin-3.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e21e89963b26fac35340767dd5c174b9b7aa24c0d435226d18ad275f190cf50 |
|
MD5 | d69e87f465ee90afb094ea7d6735a772 |
|
BLAKE2b-256 | f6da6996b657f897e550d7f34b0df2d02aada8b214af7ed99c05ab9fa178b131 |