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.
Aufgabe
MittelGib jeder Notiz einen Besitzer.
- Füge in
notes/models.pyein FeldownerzuNotehinzu: einenForeignKeyaufsettings.AUTH_USER_MODELmiton_delete=models.CASCADEundrelated_name="notes". Importieresettingsausdjango.conf. - 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
3Deine eigenen Daten
Eine Notiz hat einen BesitzerNur meine NotizenÜbe selbstständig: Django-Playground