Если в браузере появляется сообщение о недоступности веб-страницы, убедитесь в том, что сервер
Django работает в терминальном окне . Если сервер не работает, активизируйте виртуальную среду
и снова введите команду python manage .py runserver .
что созданная тема.
Начало работы над приложением
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 Глава 18 • Знакомство с Django
Проведите миграцию базы данных и проверьте вывод:
(ll_env)learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
0002_entry.py:
- Create model Entry
(ll_env)learning_log$ python manage.py migrate
Operations to perform:
...
Applying learning_logs.0002_entry...
OK
Команда генерирует новую миграцию с именем
0002_entry .py
, которая сообщает
Django, как изменить базу данных для хранения информации, связанной с моде-
лью Entry . При выдаче команды
migrate
Django подтверждает, что применение
миграции прошло успешно .
Регистрация Entry на административном сайте
Модель
Entry
тоже необходимо зарегистрировать. Файл
admin .py
должен выглядеть так:
Достарыңызбен бөлісу: