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.
Tantangan
MudahHalaman lowongan kerja kini memiliki tautan Edit. Buat halaman di baliknya:
- Sebuah
JobUpdateView, yaituUpdateViewuntukJobdengan lima field yang sama sepertiJobCreateView. - Rute
"jobs/<slug:slug>/edit/"bernamaedit.
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
2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django