В части 2 мы сгенерировали таблицы для нашего приложения в базе данных. В этой части мы настроим админку для использования нашего приложения "Опросы".
1. Зарегистрируем модель Question
в админке. Для этого отредактируем файл polls/admin.py:
По умолчанию, сервер будет запущен по адресу: http://127.0.0.1:8000/
Смысл состоит в создании класса с настройками, который передается в качестве второго параметра в функцию admin.site.register().
Поля поменялись местами:
Указание в качестве свойства класса collapse позволяет отображать филдсет свернутым:
Однако удобнее, если ответы и голоса располагаются в одну линию. Для этого нужно поправить файл polls/admin.py:
Этап
5. Настройка админки
# -*- coding:utf-8 -*- from django.contrib import admin from .models import Question admin.site.register(Question)
Здесь мы импортируем
только модель Question.
Модель Answer импортировать не нужно, т.к. она связана с Question через
внешний ключ.
Внимание: при импорте модели Question мы не указываем имя приложения polls:
from .models import Question
Это позволяет нам не привязываться к названию приложения. Мы просто импортируем модель Question из файла models.py, который лежит в той же папке, что и файл admin.py.
Внимание: при импорте модели Question мы не указываем имя приложения polls:
from .models import Question
Это позволяет нам не привязываться к названию приложения. Мы просто импортируем модель Question из файла models.py, который лежит в той же папке, что и файл admin.py.
2. Запустим сервер разработки, выполнив в консоли cmd.exe команду:
python manage.py runserver
По умолчанию, сервер будет запущен по адресу: http://127.0.0.1:8000/
3. Проверьте работу админки: http://127.0.0.1:8000/admin/
У вас получится следующее:
Нажмите на пункт Вопросы, на открывшейся странице в правом верхнем углу нажмите Добавить вопрос и создайте вопрос для
голосования, нажав Сохранить:
4. Поменяем порядок полей в админке Django. Для этого скорректируем
файл polls/admin.py:
# -*- coding:utf-8 -*- from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fields = ['is_active', 'date_published', 'title'] admin.site.register(Question, QuestionAdmin)
Смысл состоит в создании класса с настройками, который передается в качестве второго параметра в функцию admin.site.register().
Поля поменялись местами:
5. Добавим филдсеты (fieldsets) – группы полей.
Для групп полей, которые редко
используются, можно предусмотреть, чтобы они по умолчанию были в свернутом
состоянии - при помощи 'classes': ['collapse']. Отредактируем файл polls/admin.py:
# -*- coding:utf-8 -*- from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['title', 'is_active']} ), ('Информация о дате', {'fields': ['date_published'], 'classes': ['collapse']} ), ] admin.site.register(Question, QuestionAdmin)
Указание в качестве свойства класса collapse позволяет отображать филдсет свернутым:
Филдсет свернут
6. Будет удобно, если варианты ответа можно будет добавить на той же странице, что и вопрос опроса. Благо, что фреймворк Django легко позволяет это реализовать. Отредактируем файл polls/admin.py:
# -*- coding:utf-8 -*- from django.contrib import admin from .models import Question, Answer class AnswerInline(admin.StackedInline): model = Answer extra = 2 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['title', 'is_active']} ), ('Информация о дате', {'fields': ['date_published'], 'classes': ['collapse']} ), ] inlines = [AnswerInline] admin.site.register(Question, QuestionAdmin)
Теперь мы можем редактировать ответы на странице создания
вопроса для голосования. В классе настроек AnswerInline (имя может
быть любым) указана используемая модель Answer и число ответов по
умолчанию extra = 2.
Ответы на странице создания вопроса
Однако удобнее, если ответы и голоса располагаются в одну линию. Для этого нужно поправить файл polls/admin.py:
class AnswerInline(admin.TabularInline):
#...
Как видно, мы заменили admin.StackedInline на admin.TabularInline. Вот результат:
Расположение ответов TabularInline
7. По умолчанию Django отображает
для каждой модели то, что возвращает функция __unicode__(self),
расположенная в каждом классе модели. Так, например, в модели Question эта функция возвращает self.title.
Поэтому по умолчанию отображается только поле title (в модели Question мы присвоили полю название "Вопрос"):
Поле Вопрос
Пусть еще отображается дата публикации опроса и его активность (неактивный опрос на сайте отображать не будем). Для этого нужно поправить
файл polls/admin.py:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('title', 'date_published', 'is_active')
Продолжение - Опрос (ч.3.2)
Комментариев нет:
Отправить комментарий