Menu
CoddyTech

صفحة للمدعو

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

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

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

challenge icon

التحدي

متوسط
  • /events/<pk>/guests/، واسم عنوان URL هو guests، يعرض ضيوف الفعالية مع عناوين بريدهم الإلكتروني في guest_list.html.
  • تحتوي صفحة كل فعالية على رابط إليه بعنوان Manage guests.

اضغط على Run، وافتح Friday Jazz Night، ثم اضغط على Manage guests.

جرّب بنفسك

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