Редактирование данных
449
Чтобы убедиться в том, что миграция сработала так, как и ожидалось, можно вос-
пользоваться интерактивной оболочкой:
❶
>>>
from learning_logs.models import Topic
❷
>>>
for topic in Topic.objects.all():
...
print(topic, topic.owner)
...
Chess ll_admin
Rock Climbing ll_admin
>>>
После импортирования
Topic
из
learning_logs.models
мы перебираем все су-
ществующие темы, выводим каждую тему и имя пользователя, которому она при-
надлежит
. Как видите, сейчас каждая тема принадлежит пользователю
ll_admin
.
(Если при выполнении кода произойдет ошибка, попробуйте выйти из оболочки
и запустить ее заново.)
ПРИМЕЧАНИЕ
Вместо миграции можно просто сбросить содержимое базы данных,
но это приведет к потере всех существующих данных .
Полезно научиться выполнять
миграцию базы данных без нарушения целостности данных пользователей . Если вы
хотите начать с новой базы данных, используйте команду
python
manage.py
flush
для
повторного построения структуры базы данных . Вам придется
создать нового супер-
пользователя, а все данные будут потеряны .
Ограничение доступа к темам
В настоящее время пользователь, выполнивший вход, будет видеть все темы не-
зависимо от того, под какой учетной записью он вошел. Сейчас мы изменим при-
ложение, чтобы каждый пользователь видел только принадлежащие ему темы.
Внесите следующее
изменение в функцию
topics()
в файле
views .py
:
views.py
...
@login_required
def topics(request):
"""Выводит список тем."""
topics = Topic.objects.filter(owner=request.user).order_by('date_added')
context = {'topics': topics}
return render(request, 'learning_logs/topics.html', context)
...
Если пользователь выполнил вход, в объекте запроса устанавливается атрибут
request.user
с информацией о пользователе. Фрагмент кода
Topic.objects.
filter(owner=request.user)
приказывает Django извлечь из базы данных только
те объекты
Topic
, у которых атрибут
owner
соответствует текущему пользователю.
Так как способ отображения не изменяется, изменять шаблон для страницы тем
вообще не нужно.