CreateView
Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 10 dari 18.
Menu memiliki tautan Post a job tanpa halaman di baliknya. Halaman yang menambahkan satu baris selalu menggunakan kode yang sama: tampilkan formulir kosong, periksa data yang dikirim, simpan, lalu alihkan. CreateView adalah kode itu, dengan ModelForm yang dibuat untukmu:
from django.views.generic import CreateView
class RecipeCreateView(CreateView):
model = Recipe
fields = ["title", "cuisine", "minutes"]fields mencantumkan kolom formulir, seperti Meta milik ModelForm. Template default-nya adalah recipes/recipe_form.html, dengan formulir sebagai form. Data yang tidak valid akan menampilkan formulir lagi beserta error-nya, dan tidak ada yang disimpan.
Letakkan rute "recipes/new/" di atas "recipes/<slug:slug>/". Django menggunakan rute pertama yang cocok. new adalah slug yang valid, jadi rute slug yang diletakkan di atas rute ini akan menangkap /recipes/new/ dan merespons dengan 404.
Tantangan
SedangBuat halaman di balik Post a job dengan templat siap pakai jobs/job_form.html.
- Di
jobs/views.py, tambahkanJobCreateView, sebuahCreateViewuntukJobdengan fieldtitle,company,city,salary, dandescription. - Di
jobs/urls.py, tambahkan rute"jobs/new/"bernamacreate.
Post a job: data tersimpan, lalu Django berhenti dengan No URL to redirect to, yang akan diperbaiki di pelajaran berikutnya.
Coba sendiri
from django.views.generic import 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
Semua pelajaran di View Berbasis Class
2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django