Инструмент администрирования Django

Django предоставляет веб-инструмент администрирования.

Автоматический инструмент администрирования Django входит в состав django.contrib. Вы можете увидеть его в INSTALLED_APPS в settings.py вашего проекта:

/HelloWorld/HelloWorld/settings.py код файла:

INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )

django.contrib — это обширный набор функциональных возможностей и неотъемлемая часть базового кода Django.


Активировать инструменты управления

Обычно это автоматически настраивается в urls.py при создании проекта; нам просто нужно удалить комментарии.

Элементы конфигурации следующие:

/HelloWorld/HelloWorld/urls.py код файла:

# urls.py from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]

После того как всё это настроено, инструмент управления Django Admin готов к запуску.


Используйте инструменты управления

Запустите сервер разработки, затем откройте http://127.0.0.1:8000/admin/ в браузере, и вы увидите следующий интерфейс:

Вы можете использовать командуpython manage.py createsuperuserчтобы создать суперпользователя, как показано ниже:

# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
[root@solar HelloWorld]#

Затем введите имя пользователя и пароль для входа. Интерфейс показан ниже:

Чтобы интерфейс администратора мог управлять моделью данных, нам нужно сначала зарегистрировать модель данных в admin. Например, ранее мы создали модель Test в TestModel. Измените TestModel/admin.py:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test # Зарегистрируйте свои модели здесь. admin.site.register(Test)

После обновления вы увидите таблицу данных Testmodel:


Сложная модель

Панель администратора мощна и полностью способна работать с более сложными моделями данных.

Сначала добавьте более сложную модель данных в TestModel/models.py:

HelloWorld/TestModel/models.py: Код файла:

from django.db import models # Создайте свои модели здесь. class Test(models.Model): name = models.CharField(max_length=20) class Contact(models.Model): name = models.CharField(max_length=200) age = models.IntegerField(default=0) email = models.EmailField() def __unicode__(self): return self.name class Tag(models.Model): contact = models.ForeignKey(Contact, on_delete=models.CASCADE,) name = models.CharField(max_length=50) def __unicode__(self): return self.name

Здесь есть две таблицы. Tag использует Contact как внешний ключ. Одному Contact может соответствовать несколько Tags.

Мы также можем видеть много типов атрибутов, которые мы не встречали раньше, например IntegerField для хранения целых чисел.

Зарегистрируйте несколько моделей в TestModel/admin.py и отобразите их:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Зарегистрируйте ваши модели здесь. admin.site.register([Test, Contact, Tag])

Обновите страницу управления, и результаты отобразятся следующим образом:

С помощью вышеуказанного инструмента admin мы можем выполнять сложные операции с моделями.

Если вы ещё не создали структуру таблицы, вы можете использовать следующую команду для её создания:

$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构

Пользовательская форма

Мы можем настроить страницу администратора, чтобы заменить страницу по умолчанию. Например, на странице "add" выше мы хотим отображать только разделы name и email. Измените TestModel/admin.py:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Зарегистрируйте свои модели здесь. class ContactAdmin(admin.ModelAdmin): fields = ('name', 'email') admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])

Приведённый выше код определяет класс ContactAdmin, задающий формат отображения страницы администратора.

Атрибут fields внутри определяет поля, которые должны отображаться.

Поскольку этот класс соответствует модели данных Contact, нам нужно зарегистрировать их вместе. Эффект отображения следующий:

Мы также можем разделить поля ввода на разделы, и каждый раздел может определять собственный формат. Измените TestModel/admin.py на:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Зарегистрируйте свои модели здесь. class ContactAdmin(admin.ModelAdmin): fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), # CSS 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Тег])

Приведенные выше поля разделены на два раздела: Main и Advance. Атрибут classes задает CSS-формат раздела, к которому он принадлежит. Здесь раздел Advance скрыт:

Рядом с разделом Advance есть кнопка Показать для его развертывания. После развертывания можно нажать Скрыть, чтобы скрыть его, как показано на рисунке ниже:


Встроенное отображение

В приведенном выше примере Contact — это внешний ключ для Tag, поэтому существует связь внешнего ключа.

Однако при отображении страницы по умолчанию они разделены, что не отражает их подчиненную связь. Мы можем использовать встроенное отображение, чтобы Tag отображался на странице редактирования Contact.

Измените TestModel/admin.py:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

Отображаемый эффект выглядит следующим образом:


Отображение страницы списка

После ввода нескольких записей в Contact страница списка Contact выглядит следующим образом:

Мы также можем настроить отображение этой страницы. Например, чтобы отобразить больше столбцов в списке, просто добавьте атрибут list_display в ContactAdmin:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') # list inlines = [TagInline] # Inline fieldsets = ( ['Основное',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

Обновите страницу, результат отображения будет следующим:

Функция поиска очень полезна при управлении большим количеством записей. Мы можем использовать search_fields, чтобы добавить панель поиска на эту страницу списка:

HelloWorld/TestModel/admin.py: код файла:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') # list search_fields = ('name',) inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

В этом примере мы искали записи с name example, и результаты показаны ниже:

Инструмент управления Django Admin также имеет много практических функций. Заинтересованные студенты могут изучить его глубже.

Другие расширения