Редактирование
данных
447
cl
ass Topic(models.Model):
"""Тема, которую изучает пользователь"""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
"""Возвращает строковое представление модели."""
return self.text
class Entry(models.Model):
...
Сначала модель
User
импортируется из
django.contrib.auth
. Затем в
Topic
до-
бавляется поле
owner
, используемое в отношении внешнего ключа к модели
User
.
Если пользователь удаляется, все темы, связанные с этим пользователем, также
будут удалены.
Идентификация
существующих пользователей
При проведении миграции Django модифицирует базу данных, чтобы в ней хра-
нилась связь между каждой темой и пользователем. Для выполнения миграции
Django необходимо знать, с каким пользователем должна быть связана каждая
существующая тема. Проще всего связать все существующие темы с одним поль-
зователем, например суперпользователем. Но для этого сначала необходимо узнать
идентификатор этого пользователя.
Просмотрим идентификаторы всех пользователей, созданных до настоящего мо-
мента. Запустите сеанс оболочки Django и введите следующие команды:
(ll_env)learning_log$
python manage.py shell
❶
>>>
from django.contrib.auth.models import User
❷
>>>
User.objects.all()
, , ]>
❸
>>>
for user in User.objects.all():
...
print(user.username, user.id)
...
ll_admin 1
eric 2
willie 3
>>>
В точке
в сеанс оболочки импортируется модель
User
. После этого просматрива-
ются все пользователи, созданные до настоящего момента
. В выходных данных
перечислены три пользователя:
ll_admin
,
eric
и
willie
.
В точке
перебирается список пользователей, и для каждого пользователя вы-
водится его имя и идентификатор. Когда Django спросит, с каким пользователем
связать существующие темы, мы используем один из этих идентификаторов.