הגעה למשרה החדשה
חלק מהיחידה תצוגות מבוססות מחלקות במסלול ה-Django של Coddy. שיעור 11 מתוך 18.
מפרסמים משרה, ו-Django שומר אותה ואז נעצר: No URL to redirect to. לאחר השמירה, CreateView מפנה אל success_url שלו. אם אין כזה, הוא מבקש מהשורה החדשה את הכתובת שלה באמצעות מתודה של המודל, get_absolute_url().
הכתובת של דף השורה תלויה בשורה עצמה, ולכן המתודה שייכת למודל. בונים אותה באמצעות reverse(), שהופכת שם של נתיב וארגומנטים לכתובת URL, כפי ש-{% url %} עושה בתבנית:
class Recipe(models.Model):
...
def get_absolute_url(self):
return reverse("recipes:recipe", kwargs={"pk": self.pk})מעבירים את הארגומנטים לפי שמות באמצעות kwargs={...}, או לפי סדר באמצעות args=[...], ומייבאים את reverse מתוך django.urls. בתבנית אפשר ליצור קישור באמצעות {{ recipe.get_absolute_url }}, וגם UpdateView מפנה לשם.
אתגר
בינונילאחר פרסום המשרה, הדפדפן אמור להציג את דף המשרה החדשה:
- ב־
jobs/models.py, הוסיפו ל־Jobמתודה בשםget_absolute_url()שמחזירה את כתובת ה־URL של הדף שלה, הנתיבjobs:detail. - השאירו את
JobCreateViewכפי שהוא.
לחצו על Run ופרסמו משרה: תגיעו לדף שלה.
נסו בעצמכם
from datetime import date
from django.conf import settings
from django.db import models
from django.utils.text import slugify
class Job(models.Model):
title = models.CharField(max_length=200)
company = models.CharField(max_length=200)
city = models.CharField(max_length=100)
salary = models.PositiveIntegerField(help_text="Yearly, in euros.")
description = models.TextField(blank=True)
posted = models.DateField(default=date.today)
slug = models.SlugField(max_length=220, unique=True, blank=True)
posted_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="jobs",
)
def __str__(self):
return f"{self.title} at {self.company}"
def save(self, *args, **kwargs):
# משרה חדשה מקבלת slug מהכותרת שלה ומשם החברה: "python-developer-acme".
if not self.slug:
base = slugify(f"{self.title} {self.company}") or "job"
slug = base
n = 2
while Job.objects.filter(slug=slug).exists():
slug = f"{base}-{n}"
n += 1
self.slug = slug
super().save(*args, **kwargs)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תצוגות מבוססות מחלקות
4תצוגות לעריכה
CreateViewהגעה למשרה החדשהתרגלו בעצמכם: Django אונליין