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 gemeinsamen Notizstapel. Damit sie voneinander unterschieden werden können, muss bei jeder Notiz festgehalten werden, wer sie geschrieben hat: ein ForeignKey, wie der 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". So funktioniert der Code auch in einem Projekt mit einem eigenen Benutzermodell.

Wer eine Notiz geschrieben hat, ist niemals ein Formularfeld: Ein Benutzer, der es auswählen könnte, könnte als jemand anderes schreiben. Die View füllt es aus. Wie im Abschnitt zu Formularen erstellt form.save(commit=False) das Objekt, ohne es zu speichern, sodass die View ein Feld festlegen kann, das im Formular nicht vorkommt:

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

Führe „Run“ aus, um makemigrations und migrate für das neue Feld auszuführen.

challenge icon

Aufgabe

Mittel

Gib jeder Notiz einen Besitzer.

  1. Füge in notes/models.py ein Feld owner zu Note hinzu: einen ForeignKey auf settings.AUTH_USER_MODEL mit on_delete=models.CASCADE und related_name="notes". Importiere settings aus django.conf.
  2. Ersetze in note_create (views.py) note = form.save(). Erstelle die Notiz, ohne sie zu speichern, setze ihren Besitzer auf den angemeldeten Benutzer und speichere sie anschließend.

Schreibe eine Notiz als ada und öffne dann den Tab „Daten“: Ihr Besitzer ist 1.

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