Menu
CoddyTech

שמות קשורים

חלק מהיחידה מודלים וממשק הניהול במסלול ה-Django של Coddy. שיעור 17 מתוך 23.

העמוד של ספר יכול להציג ספרים אחרים של המחבר. פירוש הדבר הוא מעבר מהמחבר בחזרה לספרים שלו: מפתח זר פועל בשני הכיוונים. כאשר Loan מצביע על ספר, loan.book מתקדם בכיוון אחד, ו-Django מוסיף מנהל ל-Book עבור הכיוון ההפוך, ששמו מורכב משם המודל בתוספת _set: book.loan_set.all(). related_name נותן לו שם טוב יותר:

book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")

כעת book.loans.all() מחזיר את ההשאלות של הספר הזה, book.loans.count() פועל כמו על Loan.objects, ו-loan_set כבר לא קיים.

בתבניות, עוקבים אחר קשרים באמצעות נקודות וקוראים למתודות בלי סוגריים: בעמוד של ספר, {% for loan in book.loans.all %} מציג את ההשאלות של הספר הזה. שם שגוי לא יציג דבר ולא תופיע שגיאה, לכן כשרשימה יוצאת ריקה, בדקו קודם את השמות.

challenge icon

אתגר

קל

הציגו את הספרים האחרים של המחבר בדף של כל ספר.

  1. ב־books/models.py, תנו ל־Book.author את השם הקשור books, כדי ש־author.books.all() יחזיר כל ספר מאת אותו מחבר.
  2. ב־book_detail.html, מעל הקישור חזרה, הוסיפו <h2> כמו More by Frank Herbert ו־<ul class="more"> שמציג את כל הספרים מאת אותו מחבר, כל אחד מהם קישור לדף שלו.

לחצו על Run ואז על Dune: תחת More by Frank Herbert תראו את Children of Dune ואת Dune.

נסו בעצמכם

{% extends "books/base.html" %}

{% block title %}{{ book.title }}{% endblock %}

{% block content %}
<h1>{{ book.title }}</h1>
<p class="author">by {{ book.author }}</p>
<ul>
    <li>Published in {{ book.year }}</li>
    <li>Genre: {{ book.get_genre_display }}</li>
    <li>Price: {{ book.price }}</li>
</ul>
<p><a href="{% url 'books:home' %}">Back to the shelf</a></p>
{% endblock %}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה מודלים וממשק הניהול

תרגלו בעצמכם: Django אונליין