Книга «Изучаем Python»


Рис. 18.2. Административный сайт с включением модели Topic ПРИМЕЧАНИЕ



Pdf көрінісі
бет215/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   211   212   213   214   215   216   217   218   ...   238
Рис. 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    Глава 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

 должен выглядеть так:



Достарыңызбен бөлісу:
1   ...   211   212   213   214   215   216   217   218   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет