Menu
CoddyTech

Bir Katılım Formu

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 16 / 20.

Ziyaretçiler geleceklerini belirtmek istiyor. Projede artık Event için bir ForeignKey içeren (related_name="rsvps") yeni bir RSVP modeli var ve her etkinlik sayfasında Katılıyor musun? başlığının altında bir form bulunuyor.

RSVP formu bir ad ve e-posta ister, etkinliği asla sormaz: ziyaretçi o etkinliğin sayfasındadır ve bir alan, başka bir etkinlik seçmesine olanak tanır. Görünümün belirleyeceği alanları fields içine koymayın; bunları görünümde ayarlayın.

form.save(commit=False), nesneyi kaydetmeden oluşturur; böylece geri kalanını önce ayarlayabilirsiniz. Bir mağazanın sipariş formu durumu asla sormaz:

form = OrderForm(request.POST)
if form.is_valid():
    order = form.save(commit=False)
    order.status = "new"
    order.save()

Düz bir form.save() satırı hemen kaydeder ve boş bırakılan zorunlu bir ForeignKey hata verir: IntegrityError.

challenge icon

Görev

Orta
  • events/forms.py dosyasına, yalnızca name ve email bilgilerini isteyen, RSVP için bir ModelForm olan RSVPForm ekleyin.
  • event_detail içinde bunu şablona form olarak aktarın. Geçerli bir POST, bu etkinlik için RSVP'yi kaydeder, You're on the list! mesajını ekler ve etkinliğin sayfasına yönlendirir.

Run'a basın, bir etkinlik açın ve RSVP yapın.

Kendin dene

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

from .forms import EventForm
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)
    return render(request, "events/event_detail.html", {"event": event})


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

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground