Güncelleme Görünümü
Coddy'nin Django Journey'sinin Sınıf Tabanlı Görünümler bölümünün bir parçası. Ders 12 / 18.
İlan verenlerin iş ilanlarını düzeltmesi gerekir. Bir satırı düzenlemek, yeni bir satır oluşturmak gibidir; ancak form önceden doldurulmuş olarak açılır ve kaydetmek yeni bir satır eklemek yerine mevcut satırı değiştirir. UpdateView her ikisini de yapar. Bir tarif sitesi:
class RecipeUpdateView(UpdateView):
model = Recipe
fields = ["title", "cuisine", "minutes"]
# urls.py
path("recipes/<int:pk>/change/", views.RecipeUpdateView.as_view(), name="change")Satırı, DetailView gibi URL'deki pk veya slug aracılığıyla bulur ve böyle bir satır yoksa 404 yanıtı verir. Kaydettikten sonra, CreateView'ın yönlendirdiği yere gider: success_url veya satırın get_absolute_url() adresi.
recipes/recipe_form.html şablonunu CreateView ile paylaşır ve satırı object olarak ekler; bu nedenle {% if object %} yalnızca düzenleme sırasında doğrudur. fields zorunludur: Django, ziyaretçinin hangi alanları değiştirebileceğini tahmin etmez.
Görev
Kolayİş sayfalarında artık bir Edit bağlantısı var. Bu bağlantının arkasındaki sayfayı şöyle oluştur:
JobCreateViewile aynı beş alana sahip birJobiçinUpdateViewolan birJobUpdateView.editadlı bir"jobs/<slug:slug>/edit/"yolu.
Run'a bas, bir işi aç, Edit'e bas ve kaydet: yaptığın değişiklikle birlikte iş sayfasına dönersin.
Kendin dene
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"]
Sınıf Tabanlı Görünümler bölümündeki tüm dersler
4Düzenleme Görünümleri
Oluşturma GörünümüYeni İş İlanına GeçişKendi başına pratik yap: Django playground