Menu
CoddyTech

UpdateView

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

Orang yang memasang lowongan perlu memperbaiki lowongan mereka. Mengedit baris sama seperti membuat baris, tetapi formulirnya sudah terisi dan menyimpan perubahan akan mengubah baris tersebut, bukan menambahkan baris baru. UpdateView melakukan keduanya. Contoh 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, melalui pk atau slug di URL, dan memberikan 404 jika tidak ada. Setelah menyimpan, view ini mengarahkan pengguna ke tempat yang sama seperti CreateView: success_url, atau get_absolute_url() milik baris tersebut.

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

challenge icon

Tantangan

Mudah

Halaman lowongan kerja kini memiliki tautan Edit. Buat halaman di baliknya:

  • Sebuah JobUpdateView, yaitu UpdateView untuk Job dengan lima field yang sama seperti JobCreateView.
  • Rute "jobs/<slug:slug>/edit/" bernama edit.

Tekan Jalankan, buka sebuah 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