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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المستخدمون والحسابات

تدرّب بنفسك: Playground لـ Django