Menu
CoddyTech

У заметки есть владелец

Часть раздела Пользователи и учетные записи путешествия по Django на Coddy. Урок 8 из 16.

Все авторизованные пользователи делят одну общую стопку заметок. Чтобы различать их, в каждой заметке нужно записать, кто её написал: ForeignKey, как в случае связи книги с её автором.

Чтобы связать запись с пользователем, не импортируй User. Укажи в ForeignKey настройку settings.AUTH_USER_MODEL (после from django.conf import settings), которая задаёт модель пользователя; здесь это "auth.User". Тогда код будет работать и в проекте с собственной моделью пользователя.

Автор заметки никогда не должен быть полем формы: пользователь, который мог бы его выбрать, мог бы написать заметку от имени другого человека. Его указывает представление. form.save(commit=False) создаёт объект, не сохраняя его, поэтому представление может задать поле, которого нет в форме:

order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()

Выполни makemigrations и migrate для нового поля.

challenge icon

Задание

Средне
  • Note получает поле owner, которое связывает запись с пользователем. При удалении пользователя удаляются и его заметки, а user.notes.all() выводит список заметок пользователя.
  • Новая заметка принадлежит вошедшему в систему пользователю, который её создал. Форма содержит только поля title и body.

Нажми Run, войди как ada (пароль coddy-pass-123), напиши заметку и открой вкладку «Данные».

Попробуйте сами

from django.db import models


class Note(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField(blank=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-created"]

    def __str__(self):
        return self.title

Все уроки раздела Пользователи и учетные записи

Потренируйтесь самостоятельно: Песочница Django