Menu
CoddyTech

صفحة للمدعو

جزء من قسم النماذج في رحلة Django على Coddy. الدرس 19 من 20.

يريد المنظّم صفحةً لكل فعالية تعرض ضيوفها فقط، ومكانًا لإدارتهم. أنت تعرف كل جزء: عنوان URL يتضمن pk الخاص بالفعالية، وعرضًا يعثر على الفعالية، وحلقة قالب تمرّ على event.rsvps.all.

بدأنا لك قالب guest_list.html؛ وقائمته فارغة. تنتمي قائمة الضيوف إلى فعالية واحدة، لذا اعرض الضيوف من خلال الفعالية، ولا تعرضهم أبدًا من جميع طلبات الحضور.

challenge icon

التحدي

متوسط

أنشئ صفحة ضيوف لكل فعالية.

  1. في events/urls.py، أضف events/<int:pk>/guests/ بالاسم guests.
  2. في events/views.py، اكتب العرض الخاص بها: اعثر على الفعالية باستخدام pk أو أظهر خطأ 404، واعرض events/guest_list.html مع الفعالية.
  3. في guest_list.html، أضف عنصر <li> واحدًا لكل ضيف، مثل Ada (ada@example.com). استخرج الضيوف من خلال الفعالية.
  4. في event_detail.html، اربط Manage guests بعنوان events:guests.

اضغط على «إدارة الضيوف»: سترى Ada وGrace.

جرّب بنفسك

from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm, RSVPForm
from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        form = RSVPForm(request.POST, event=event)
        if form.is_valid():
            rsvp = form.save(commit=False)
            rsvp.event = event
            rsvp.save()
            messages.success(request, "You're on the list!")
            return redirect("events:detail", pk=event.pk)
    else:
        form = RSVPForm(event=event)
    return render(request, "events/event_detail.html", {"event": event, "form": form})


def new_event(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save()
            messages.success(request, "Your event was added.")
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm()
    return render(request, "events/new_event.html", {"form": form})


def edit_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        form = EventForm(request.POST, instance=event)
        if form.is_valid():
            form.save()
            messages.success(request, "Your changes were saved.")
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm(instance=event)
    return render(request, "events/edit_event.html", {"form": form, "event": event})


def delete_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        event.delete()
        messages.success(request, "The event was deleted.")
        return redirect("events:list")
    return render(request, "events/delete_event.html", {"event": event})

جميع دروس النماذج

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