Menu
CoddyTech

Hanya Catatanku

Termasuk bagian Pengguna dan Akun dalam perjalanan Django di Coddy. Pelajaran 9 dari 16.

Setiap catatan memiliki pemilik, tetapi daftar masih menampilkan Note.objects.all(): ada membaca buku harian bob. Daftar seharusnya hanya menampilkan catatan milik orang yang meminta.

Kamu memfilter ForeignKey menggunakan object, bukan nama. Situs perpustakaan menampilkan buku milik seorang penulis:

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

Django membandingkan id penulis. Jika kamu memberikan nama, filter(author="Ursula K. Le Guin"), akan terjadi ValueError.

Saat baris yang akan dibandingkan adalah pengunjung, kamu tidak perlu mencari siapa pun: Django sudah menyimpan user yang masuk pada setiap request sebagai object dari session. Jangan pernah mengambil user dari URL atau field form, karena siapa pun bisa mengubahnya.

challenge icon

Tantangan

Mudah

Di note_list, tampilkan hanya catatan milik pengguna yang sedang masuk.

Tekan tombol Jalankan dan masuk sebagai ada, lalu keluar dan masuk sebagai bob (keduanya menggunakan coddy-pass-123). Masing-masing hanya melihat catatannya sendiri.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengguna dan Akun

Latihan sendiri: Playground Django