Menu
CoddyTech

UpdateView

Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 12 dari 18.

Pembuat posting perlu memperbaiki lowongan mereka. Mengedit satu baris berarti membuatnya, hanya saja formulir sudah terisi dan menyimpan perubahan akan mengubah baris tersebut, bukan menambahkan baris baru. UpdateView melakukan keduanya. Situs resep:

class RecipeUpdateView(UpdateView):
    model = Recipe
    fields = ["title", "cuisine", "minutes"]


# urls.py
path("recipes/<int:pk>/change/", views.RecipeUpdateView.as_view(), name="change")

View ini menemukan baris seperti yang dilakukan DetailView, berdasarkan pk atau slug di URL, dan memberikan respons 404 jika tidak ada baris yang cocok. Setelah menyimpan, view ini menuju ke tempat yang dituju CreateView: success_url, atau get_absolute_url() milik baris tersebut.

View ini menggunakan recipes/recipe_form.html bersama CreateView dan menambahkan baris sebagai object, sehingga {% if object %} bernilai true hanya saat mengedit. fields wajib diisi: Django tidak akan menebak field mana yang boleh diubah pengunjung.

challenge icon

Tantangan

Mudah

Halaman lowongan kerja kini memiliki tautan Edit. Buat halaman di balik tautan itu.

  1. Di jobs/views.py, tambahkan JobUpdateView, sebuah UpdateView untuk Job dengan lima field yang sama seperti JobCreateView.
  2. Di jobs/urls.py, tambahkan rute "jobs/<slug:slug>/edit/" bernama edit.

Buka lowongan kerja, tekan Edit lalu simpan: kamu akan kembali ke halaman lowongan kerja dengan perubahanmu.

Coba sendiri

from django.views.generic import CreateView, DetailView, ListView, TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"


class JobListView(ListView):
    model = Job
    context_object_name = "jobs"
    ordering = ["-posted"]
    paginate_by = 5

    def get_queryset(self):
        jobs = super().get_queryset()
        city = self.request.GET.get("city")
        if city:
            jobs = jobs.filter(city=city)
        return jobs


class JobDetailView(DetailView):
    model = Job


class JobCreateView(CreateView):
    model = Job
    fields = ["title", "company", "city", "salary", "description"]

Semua pelajaran di View Berbasis Class

Latihan sendiri: Playground Django