Глава 18 • Знакомство с Django
зователей и группы, а также вносить изменения в уже существующие настройки.
Помимо этого можно работать с данными, связанными с только что определенной
моделью
Topic
.
Рис. 18.2.
Административный сайт с включением модели Topic
ПРИМЕЧАНИЕ
Если в браузере появляется сообщение о недоступности веб-страницы, убедитесь в том, что сервер
Django работает в терминальном окне . Если сервер не работает, активизируйте виртуальную среду
и снова введите команду python manage .py runserver .
Добавление тем
Когда модель
Topic
зарегистрирована на административном сайте, добавим
первую тему. Щелкните на ссылке
Topics
, чтобы перейти к странице
Topics
; стра-
ница практически пуста, потому что еще нет ни одной темы для выполнения
операций. Щелкните на ссылке
Add
; открывается форма для добавления новой
темы. Введите в первом поле текст
Chess
и щелкните на ссылке
Save
. Вы воз-
вращаетесь к административной странице
Topics
, на которой появляется только
что созданная тема.
Создадим вторую тему, чтобы у вас было больше данных для работы. Снова щелк-
ните на ссылке
Add
и создайте вторую тему
Rock
Climbing
. Ссылка
Save
снова воз-
вращает вас к основной странице
Topics
, где отображаются обе темы,
Chess
и
Rock
Climbing
.
Определение модели Entry
Чтобы сохранить информацию о том, что вы узнали по этим двум темам, необхо-
димо определить модель для записей, которые пользователь делает в своих журна-
лах. Каждая запись должна ассоциироваться с конкретной темой. Такое отношение
называется
отношением «многие-к-одному»
, поскольку многие записи могут быть
связаны с одной темой.
Начало работы над приложением
391
Код модели
Entry
выглядит так:
models.py
from django.db import models
class Topic(models.Model):
...
class Entry(models.Model):
"""Информация, изученная пользователем по теме"""
topic = models.ForeignKey(Topic)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""Возвращает строковое представление модели."""
return self.text[:50] + "..."
Класс
Entry
наследует от базового класса
Model
, как и рассмотренный ранее класс
Topic
. Первый атрибут,
topic
, является экземпляром
ForeignKey
. Термин
«внешний ключ»
(foreign key) происходит из теории баз данных; внешний ключ со-
держит ссылку на другую запись в базе данных. Таким образом каждая запись свя-
зывается с конкретной темой. Каждой теме при создании присваивается ключ, или
идентификатор. Если потребуется установить связь между двумя записями данных,
Django использует ключ, связанный с каждым блоком информации. Вскоре мы
используем такие связи для получения всех записей, связанных с заданной темой.
Затем идет атрибут с именем
text
, который является экземпляром
TextField
.
Полю такого типа ограничение размера не требуется, потому что размер отдельных
записей не ограничивается. Атрибут
date_added
позволяет отображать записи в по-
рядке их создания и снабдить каждую запись временной меткой.
В точке
класс
Meta
вкладывается в класс
Entry
. Класс
Meta
хранит дополнитель-
ную информацию по управлению моделью; в данном случае он позволяет задать
специальный атрибут, который приказывает Django использовать форму мно-
жественного числа
Entries
при обращении более чем к одной записи. (Без этого
Django будет использовать неправильную форму
Entrys
.) Наконец, метод
__str__()
сообщает Django, какая информация должна отображаться при обращении к от-
дельным записям. Так как запись может быть достаточно длинным блоком текста,
мы приказываем Django выводить только первые 50 символов
. Также добавля-
ется многоточие — признак вывода неполного текста.
Миграция модели Entry
Так как мы добавили новую модель, миграцию базы данных необходимо провести
снова. Вскоре вы привыкнете к этому процессу: вы изменяете
models .py
, выполняете
команду
python
manage.py
makemigrations
имя_приложения
, а затем команду
python
manage.py
migrate
.
392
Достарыңызбен бөлісу: |