admin.py
from django.contrib import admin
from learning_logs.models import Topic, Entry
admin.site.register(Topic)
admin.site.register(Entry)
Вернитесь на страницу http://localhost/admin/, и вы увидите раздел
Entries
в катего-
рии
learning_logs
. Щелкните на ссылке
Add
для
Entries
или щелкните на
Entries
и вы-
берите вариант
Add
. На экране должен появиться раскрывающийся список для выбора
темы, для которой создается запись, и текстовое поле для ввода записи. Выберите
в раскрывающемся списке вариант
Chess
и добавьте запись. При выборе ссылки
Save
вы вернетесь к основной административной странице. Здесь проявляются преимуще-
ства использования формата
text[:50]
в качестве строкового представления каждой
записи; работать с несколькими записями в административном интерфейсе намного
удобнее, если вы видите только часть записи вместо ее полного текста.
Создайте вторую запись для темы
Chess
и одну запись для темы
Rock
Climbing
, чтобы
у нас были исходные данные для дальнейшей разработки Learning Log.
Интерактивная оболочка Django
Введенные данные можно проанализировать на программном уровне в интерактив-
ном терминальном сеансе. Эта интерактивная среда, называемая оболочкой (shell)
Django, прекрасно подходит для тестирования и диагностики проекта. Пример
сеанса в интерактивной оболочке:
(ll_env)learning_log$ python manage.py shell
>>> from learning_logs.models import Topic
>>> Topic.objects.all()
[, ]
Начало работы над приложением 393
Команда
python
manage.py
shell
(выполняемая в активной виртуальной среде)
запускает интерпретатор Python, который может использоваться для работы с ин-
формацией в базе данных проекта. В данном случае мы импортируем модель
Topic
из модуля
learning_logs.models
. Затем метод
Topic.objects.all()
используется
для получения всех экземпляров модели
Topic
; возвращаемый список называется
итоговым набором (queryset).
Содержимое итогового набора перебирается точно так же, как и содержимое спи-
ска. Например, просмотр идентификаторов, назначенных каждому объекту темы,
выполняется так:
>>> topics = Topic.objects.all()
>>> for topic in topics:
... print(topic.id, topic)
...
1 Chess
2 Rock Climbing
Итоговый набор сохраняется в
topics
, после чего выводится атрибут
id
каждого
объекта
topic
и его строковое представление. Мы видим, что теме
Chess
присвоен
идентификатор 1, а
Rock
Climbing
присвоен идентификатор 2.
Зная идентификатор конкретного объекта, можно получить этот объект и проана-
лизировать содержащиеся в нем атрибуты. Просмотрим значения
text
и
date_added
для темы
Chess
:
>>> t = Topic.objects.get(id=1)
>>> t.text
'Chess'
>>> t.date_added
datetime.datetime(2015, 5, 28, 4, 39, 11, 989446, tzinfo=)
Также можно просмотреть записи, относящиеся к конкретной теме. Ранее мы
определили атрибут
topic
для модели
Entry
. Он был экземпляром
ForeighKey
,
представляющим связь между записью и темой. Django может использовать эту
связь для получения всех записей, относящихся к некоторой теме:
>>> t.entry_set.all()
[ ,
the opening phase of the game, it's important t...>]
Чтобы получить данные через отношение внешнего ключа, используйте имя
связанной модели, записанное в нижнем регистре, за которым следует символ
подчеркивания и слово
set
. Допустим, у вас имеются модели
Pizza
и
Topping
,
и модель
Topping
связана с
Pizza
через внешний ключ. Если ваш объект называется
my_pizza
, для получения всех связанных с ним экземпляров
Topping
используется
выражение
my_pizza.topping_set.all()
.
Мы будем использовать такой синтаксис при переходе к программированию стра-
ниц, которые могут запрашиваться пользователями. Оболочка очень удобна тогда,
когда вы хотите проверить, что ваш код получает нужные данные. Если в оболочке
код работает так, как задумано, можно ожидать, что он будет правильно работать
394 Глава 18 • Знакомство с Django
и в файлах, которые вы создаете в своем проекте. Если код выдает ошибки или не
загружает те данные, которые должен загружать, вам будет намного проще отладить
его в простой оболочке, чем при работе с файлами, генерирующими веб-страницы.
В книге мы не будем часто возвращаться к оболочке, но вам не стоит забывать
о ней — это полезный инструмент, который поможет вам освоить синтаксис Django
для работы с данными проекта.
Достарыңызбен бөлісу: |