Menu
CoddyTech

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 fragt.

Du filterst eine ForeignKey mit einem Objekt, nicht mit einem Namen. Eine Bibliothekswebsite listet die Bücher einer Autorin auf:

author = Author.objects.get(name="Ursula K. Le Guin")
books = Book.objects.filter(author=author)

Django vergleicht die ID der Autorin. Die Übergabe des Namens, filter(author="Ursula K. Le Guin"), schlägt mit ValueError fehl. Um nach dem Namen der Autorin zu suchen, füge zwei Unterstriche an den Schlüssel an: filter(author__name="Ursula K. Le Guin").

Hier ist das Objekt, mit dem verglichen werden soll, der Besucher, daher muss niemand nachgeschlagen werden. Django fügt den angemeldeten Benutzer bereits jeder Anfrage hinzu. Übernimm den Benutzer niemals aus der URL oder einem Formularfeld, das jeder ändern kann.

challenge icon

Aufgabe

Einfach

Zeige in note_list nur die Notizen des angemeldeten Benutzers an.

Melde dich als ada an (Passwort coddy-pass-123): Die Liste zeigt Shopping list und Ideas, nicht Bob's diary.

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})
quiz iconTeste dich selbst

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

Übe selbstständig: Django-Playground