Menu
CoddyTech

Mengedit Acara

Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 13 dari 20.

Sekarang, setiap halaman acara memiliki tautan Edit acara ini ke /events/1/edit/. URL, tautan, dan templatnya sudah siap, dan edit_event sudah menemukan acara yang disebutkan di URL. Bagian lain dari view menjadi tugasmu.

ModelForm mengedit baris yang sudah ada saat kamu memberikannya baris tersebut sebagai instance. Untuk catatan di aplikasi catatan:

note = get_object_or_404(Note, pk=4)

form = NoteForm(instance=note)                # terisi dengan nilai-nilai dari catatan ini

form = NoteForm(request.POST, instance=note)  # nilai-nilai baru untuk catatan ini
if form.is_valid():
    form.save()                               # memperbarui catatan 4 tanpa menambah baris

Tanpa data, NoteForm(instance=note) menampilkan formulir yang sudah terisi dengan nilai-nilai saat ini dari baris tersebut. Dengan data, instance=note membuat form.save() memperbarui baris tersebut, bukan membuat baris baru.

Halaman edit membutuhkan keduanya. Jika kamu lupa menyertakan instance pada GET, pengunjung akan melihat formulir kosong; jika kamu lupa menyertakannya pada POST, penyimpanan akan menambahkan salinan.

challenge icon

Tantangan

Mudah

Selesaikan edit_event di events/views.py dengan mengganti komentarnya. Pemanggilan render() di bagian akhir sudah meneruskan event; tambahkan form di sebelahnya.

  • GET menampilkan formulir yang terisi dengan detail acara.
  • POST yang valid menyimpan perubahan, tidak menambahkan acara baru, dan mengalihkan ke halamannya.
  • POST yang tidak valid menampilkan kembali halaman dengan error.

Ubah Place menjadi Town Hall dan tekan Save changes: halaman acara menampilkan Town Hall.

Coba sendiri

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()
            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)
    # Buat formulir untuk event ini, periksa, lalu simpan, seperti pada new_event.
    return render(request, "events/edit_event.html", {"event": event})
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Formulir

Latihan sendiri: Playground Django