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.
Görev
Ortaevents/forms.pydosyasına, yalnızcanameveemailbilgilerini isteyen,RSVPiçin bir ModelForm olanRSVPFormekleyin.event_detailiçinde bunu şablonaformolarak 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