UpdateView
חלק מהיחידה תצוגות מבוססות מחלקות במסלול ה-Django של Coddy. שיעור 12 מתוך 18.
הכותבים צריכים לתקן את המשרות שלהם. עריכת שורה דומה ליצירת שורה, אלא שהטופס מתחיל כשהוא כבר מלא, והשמירה משנה את השורה במקום להוסיף שורה חדשה. UpdateView עושה את שני הדברים. אתר מתכונים:
class RecipeUpdateView(UpdateView):
model = Recipe
fields = ["title", "cuisine", "minutes"]
# urls.py
path("recipes/<int:pk>/change/", views.RecipeUpdateView.as_view(), name="change")הוא מוצא את השורה באותו אופן כמו DetailView, לפי pk או slug שבכתובת ה-URL, ומחזיר 404 כשאין כזאת. לאחר השמירה הוא מפנה לאותו מקום שאליו CreateView מפנה: אל success_url, או אל get_absolute_url() של השורה.
הוא משתמש באותה תבנית recipes/recipe_form.html כמו CreateView, ומוסיף את השורה בתור object, כך ש-{% if object %} מתקיים רק בזמן עריכה. fields הוא שדה חובה: Django לא ינחש אילו שדות המבקר רשאי לשנות.
אתגר
קלבדפי המשרות יש כעת קישור Edit. צרו את הדף שמאחוריו:
JobUpdateView, תצוגתUpdateViewשלJobעם אותם חמשת השדות כמו ב־JobCreateView.- נתיב
"jobs/<slug:slug>/edit/"בשםedit.
לחצו על Run, פתחו משרה, לחצו על Edit ושמרו: תחזרו לדף המשרה עם השינוי שביצעתם.
נסו בעצמכם
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"]
כל השיעורים ביחידה תצוגות מבוססות מחלקות
4תצוגות לעריכה
CreateViewהגעה למשרה החדשהתרגלו בעצמכם: Django אונליין