Menu
CoddyTech

Eine Notiz hat einen Besitzer

Teil des Abschnitts Benutzer und Konten der Django-Journey von Coddy. Lektion 8 von 16.

Alle angemeldeten Benutzer teilen sich einen Notizstapel. Damit man sie auseinanderhalten kann, muss jede Notiz festhalten, wer sie geschrieben hat: einen ForeignKey, wie den von einem Buch zu seinem Autor.

Um auf einen Benutzer zu verweisen, importiere nicht User. Verweise mit dem ForeignKey auf die Einstellung settings.AUTH_USER_MODEL (nach from django.conf import settings), die das Benutzermodell angibt, hier "auth.User". Der Code funktioniert dann auch in einem Projekt mit einem eigenen Benutzermodell.

Wer eine Notiz geschrieben hat, ist niemals ein Formularfeld: Ein Benutzer, der dies auswählen könnte, könnte als jemand anderes schreiben. Die View trägt es ein. form.save(commit=False) erstellt das Objekt, ohne es zu speichern, sodass die View ein Feld setzen kann, das das Formular nicht hat:

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

Führe für das neue Feld makemigrations und migrate aus.

challenge icon

Aufgabe

Mittel
  • Note erhält ein Feld owner, das mit einem Benutzer verknüpft ist. Wenn ein Benutzer gelöscht wird, werden auch seine Notizen gelöscht, und user.notes.all() listet die Notizen eines Benutzers auf.
  • Eine neue Notiz gehört dem angemeldeten Benutzer, der sie geschrieben hat. Das Formular enthält nur title und body.

Klicke auf „Ausführen“, melde dich als ada an (Passwort coddy-pass-123), schreibe eine Notiz und öffne den Tab „Daten“.

Probier es selbst

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

Alle Lektionen in Benutzer und Konten

Übe selbstständig: Django-Playground