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 únicamente a sus invitados, un lugar donde gestionarlos. Ya conoces todas las piezas: una URL con el pk del evento, una vista que encuentra el evento y un bucle en la 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

Asigna una página de invitados a cada evento.

  1. En events/urls.py, añade events/<int:pk>/guests/ con el nombre guests.
  2. En events/views.py, escribe su vista: busca el evento por pk o devuelve un 404, y renderiza events/guest_list.html con él.
  3. En guest_list.html, añade un <li> por invitado, como Ada (ada@example.com). Accede a los invitados a través del evento.
  4. En event_detail.html, enlaza Manage guests con la URL events:guests.

Pulsa «Manage guests»: verás a Ada y Grace.

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