Menu
CoddyTech

Una página para invitados

Parte de la sección Formularios del Journey de Django de Coddy. Lección 19 de 20.

El organizador quiere una página para cada evento que muestre solo a sus invitados, un lugar para gestionarlos. Ya conoces todas las piezas: una URL con el pk del evento, una vista que busca el evento y un bucle de plantilla sobre event.rsvps.all.

La plantilla guest_list.html ya está iniciada; su lista está vacía. Una lista de invitados pertenece a un solo evento, así que consulta los invitados a través del evento, nunca desde todas las confirmaciones de asistencia.

challenge icon

Desafío

Intermedio
  • /events/<pk>/guests/, el nombre de URL guests, muestra la lista de invitados al evento con sus correos electrónicos en guest_list.html.
  • Cada página de evento enlaza a esta página con Manage guests.

Pulsa Run, abre Friday Jazz Night y pulsa Manage guests.

Pruébalo tú mismo

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

Todas las lecciones de Formularios

Practica por tu cuenta: Playground de Django