Formulir Konfirmasi Kehadiran
Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 16 dari 20.
Pengunjung ingin menyatakan bahwa mereka akan datang. Proyek ini memiliki model RSVP baru dengan ForeignKey ke Event (related_name="rsvps"), dan setiap halaman acara memiliki formulir di bawah Akan datang?.
Formulir RSVP meminta nama dan email, bukan acara: pengunjung sedang berada di halaman acara tersebut, dan sebuah field akan memungkinkan mereka memilih acara lain. Jangan masukkan ke dalam fields hal yang ditentukan oleh view, lalu tetapkan nilainya di view.
form.save(commit=False) membuat object tanpa menyimpannya, jadi kamu bisa menetapkan sisanya terlebih dahulu. Formulir pesanan toko tidak pernah menanyakan status:
form = OrderForm(request.POST)
if form.is_valid():
order = form.save(commit=False)
order.status = "new"
order.save()form.save() biasa langsung menyimpan baris, dan ForeignKey wajib yang dibiarkan kosong akan menyebabkan IntegrityError.
Tantangan
Sedang- Di
events/forms.py, tambahkanRSVPForm, sebuah ModelForm untukRSVPyang hanya memintanamedanemail. - Di
event_detail, kirimkan formulir ke template sebagaiform. POST yang valid akan menyimpan RSVP untuk acara ini, menambahkan pesanYou're on the list!, lalu mengarahkan ke halaman acara.
Tekan Jalankan, buka sebuah acara, lalu RSVP.
Coba sendiri
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})
Semua pelajaran di Formulir
Latihan sendiri: Playground Django