Menu
CoddyTech

רק הפתקים שלי

חלק מהיחידה משתמשים וחשבונות במסלול ה-Django של Coddy. שיעור 9 מתוך 16.

לכל פתק יש בעלים, אבל הרשימה עדיין מציגה את Note.objects.all(): ada קוראת את היומן של bob. הרשימה צריכה להציג רק את הפתקים של מי שמבקש אותם.

מסננים לפי ForeignKey באמצעות אובייקט, ולא באמצעות שם. אתר ספרייה מציג את הספרים של מחבר אחד:

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

Django משווה את המזהה של המחבר. העברת השם, filter(author="Ursula K. Le Guin"), נכשלת עם ValueError. כדי להתאים לפי שם המחבר, מוסיפים שני קווים תחתיים אחרי המפתח: filter(author__name="Ursula K. Le Guin").

כאן האובייקט שיש להשוות אליו הוא המבקר, ולכן אין צורך לחפש אף אחד. Django כבר מצרף את המשתמש המחובר לכל בקשה. לעולם אל תיקחו את המשתמש מכתובת URL או משדה בטופס, כי כל אחד יכול לשנות אותם.

challenge icon

אתגר

קל

ב־note_list, הצג רק את ההערות של המשתמש המחובר.

התחבר כ־ada (סיסמה coddy-pass-123): הרשימה מציגה את Shopping list ואת Ideas, ולא את Bob's diary.

נסו בעצמכם

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 iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משתמשים וחשבונות

תרגלו בעצמכם: Django אונליין