Menu
CoddyTech

Trang khách mời

Thuộc phần Biểu mẫu trong hành trình Django của Coddy. Bài học 19 trên 20.

Người tổ chức muốn mỗi sự kiện có một trang chỉ liệt kê khách mời và một nơi để quản lý họ. Bạn đã biết mọi thứ cần thiết: URL có pk của sự kiện, một view tìm sự kiện và vòng lặp trong template duyệt qua event.rsvps.all.

Template guest_list.html đã được tạo sẵn cho bạn, nhưng danh sách vẫn trống. Danh sách khách mời thuộc về một sự kiện, vì vậy hãy lấy khách mời thông qua sự kiện, đừng lấy từ tất cả RSVP.

challenge icon

Thử thách

Trung bình

Thêm một trang khách mời cho mỗi sự kiện.

  1. Trong events/urls.py, thêm đường dẫn events/<int:pk>/guests/ với tên guests.
  2. Trong events/views.py, viết view cho đường dẫn này: tìm sự kiện theo pk hoặc trả về lỗi 404, rồi render events/guest_list.html cùng với sự kiện đó.
  3. Trong guest_list.html, thêm một <li> cho mỗi khách mời, chẳng hạn Ada (ada@example.com). Lấy danh sách khách mời thông qua sự kiện.
  4. Trong event_detail.html, liên kết Manage guests đến URL events:guests.

Nhấn Manage guests: bạn sẽ thấy Ada và Grace.

Tự làm thử

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})

Tất cả bài học trong Biểu mẫu

Tự luyện tập: Playground Django