Menu
CoddyTech

Notatka ma właściciela

Część sekcji Użytkownicy i konta ścieżki Django w Coddy. Lekcja 8 z 16.

Każdy zalogowany użytkownik korzysta z tej samej puli notatek. Aby można było je odróżnić, każda notatka musi zapisywać, kto ją napisał: użyj ForeignKey, takiego jak ten łączący książkę z jej autorem.

Aby połączyć notatkę z użytkownikiem, nie importuj User. Wskaż w ForeignKey ustawienie settings.AUTH_USER_MODEL (po from django.conf import settings), które określa model użytkownika — tutaj jest to "auth.User". Dzięki temu kod pozostaje odpowiedni również w projekcie z własnym modelem użytkownika.

Informacja o tym, kto napisał notatkę, nigdy nie jest polem formularza: użytkownik, który mógłby je wybrać, mógłby napisać notatkę jako ktoś inny. Uzupełnia ją widok. Tak jak w sekcji Formularze, form.save(commit=False) tworzy obiekt bez zapisywania go, dzięki czemu widok może ustawić pole, którego nie ma w formularzu:

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

Uruchom makemigrations i migrate, aby dodać nowe pole.

challenge icon

Wyzwanie

Średni

Przypisz każdą notatkę do właściciela.

  1. W pliku notes/models.py dodaj do Note pole owner: klucz ForeignKey do settings.AUTH_USER_MODEL z argumentami on_delete=models.CASCADE i related_name="notes". Zaimportuj settings z django.conf.
  2. W funkcji note_create (w pliku views.py) zastąp note = form.save(). Utwórz notatkę bez zapisywania jej, przypisz jej zalogowanego użytkownika jako właściciela, a następnie ją zapisz.

Utwórz notatkę jako ada, a następnie otwórz kartę danych: jej właściciel ma wartość 1.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Użytkownicy i konta

Poćwicz samodzielnie: Edytor online Django