Menu
CoddyTech

Edytowanie wydarzenia

Część sekcji Formularze ścieżki Django w Coddy. Lekcja 13 z 20.

Na każdej stronie wydarzenia znajduje się teraz link Edytuj to wydarzenie prowadzący do /events/1/edit/. Adres URL, link i szablon są gotowe, a edit_event już znajduje wydarzenie wskazane w adresie URL. Reszta widoku należy do Ciebie.

ModelForm edytuje istniejący wiersz, gdy przekażesz mu go jako instance. Oto przykład z notatką w aplikacji do notatek:

note = get_object_or_404(Note, pk=4)

form = NoteForm(instance=note)                # wypełniony wartościami tej notatki

form = NoteForm(request.POST, instance=note)  # nowe wartości dla tej notatki
if form.is_valid():
    form.save()                               # aktualizuje notatkę 4, nie dodaje nowego wiersza

Bez danych NoteForm(instance=note) wyświetla formularz wypełniony bieżącymi wartościami z wiersza. Gdy przekażesz dane, instance=note sprawi, że form.save() zaktualizuje ten wiersz zamiast tworzyć nowy.

Strona edycji potrzebuje obu tych rzeczy. Jeśli zapomnisz o instancji przy GET, odwiedzający zobaczy pusty formularz; jeśli zapomnisz o niej przy POST, zapis doda kopię.

challenge icon

Wyzwanie

Łatwy

Dokończ funkcję edit_event w pliku events/views.py:

  • Żądanie GET wyświetla formularz wypełniony szczegółami wydarzenia.
  • Poprawne żądanie POST zapisuje zmiany w tym wydarzeniu, nie dodaje nowego i przekierowuje na jego stronę.
  • Niepoprawne żądanie POST ponownie wyświetla stronę wraz z błędami.

Szablon potrzebuje form i event. Naciśnij Run, a następnie Edit this event.

Spróbuj swoich sił

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)
    # Utwórz formularz dla tego wydarzenia, sprawdź go i zapisz, tak jak w new_event.
    return render(request, "events/edit_event.html", {"event": event})
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Formularze

Poćwicz samodzielnie: Edytor online Django