Nur meine Notizen
Teil des Abschnitts Benutzer und Konten der Django-Journey von Coddy. Lektion 9 von 16.
Jede Notiz hat einen Besitzer, aber die Liste zeigt weiterhin Note.objects.all() an: ada liest das Tagebuch von bob. Die Liste sollte nur die Notizen der Person anzeigen, die gerade danach fragt.
Du filterst mit einem Objekt, nicht mit einem Namen, nach einem ForeignKey. Eine Bibliothekswebsite listet die Bücher eines Autors auf:
author = Author.objects.get(name="Ursula K. Le Guin")
books = Book.objects.filter(author=author)Django vergleicht die ID des Autors. Die Angabe des Namens, filter(author="Ursula K. Le Guin"), führt zu einem Fehler vom Typ ValueError.
Wenn die Zeile, mit der verglichen werden soll, zum Besucher gehört, muss niemand nachgeschlagen werden: Django hat den angemeldeten Benutzer bereits bei jeder Anfrage als Objekt aus der Sitzung bereitgestellt. Übernimm den Benutzer niemals aus der URL oder einem Formularfeld, denn diese Angaben kann jeder ändern.
Aufgabe
EinfachListe in note_list nur die Notizen des angemeldeten Benutzers auf.
Klicke auf „Run“ und melde dich als ada an, melde dich dann ab und als bob an (beide verwenden coddy-pass-123). Jeder sieht nur seine eigenen Notizen.
Probier es selbst
from django.contrib.auth import login
from django.contrib.auth.decorators import login_not_required
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import get_object_or_404, redirect, render
from .forms import NoteForm
from .models import Note
def note_list(request):
notes = Note.objects.all()
return render(request, "notes/note_list.html", {"notes": notes})
def note_detail(request, pk):
note = get_object_or_404(Note, pk=pk)
return render(request, "notes/note_detail.html", {"note": note})
def note_create(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
note = form.save(commit=False)
note.owner = request.user
note.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm()
return render(request, "notes/note_form.html", {"form": form})
def note_edit(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
form = NoteForm(request.POST, instance=note)
if form.is_valid():
form.save()
return redirect("notes:detail", pk=note.pk)
else:
form = NoteForm(instance=note)
return render(request, "notes/note_form.html", {"form": form, "note": note})
def note_delete(request, pk):
note = get_object_or_404(Note, pk=pk)
if request.method == "POST":
note.delete()
return redirect("notes:list")
return render(request, "notes/note_confirm_delete.html", {"note": note})
@login_not_required
def signup(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect("notes:list")
else:
form = UserCreationForm()
return render(request, "notes/signup.html", {"form": form})
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Benutzer und Konten
3Deine eigenen Daten
Eine Notiz hat einen BesitzerNur meine NotizenÜbe selbstständig: Django-Playground