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"> تضم كل كتاب للمؤلف، بحيث يكون كل كتاب رابطًا إلى صفحته.

اضغط على «تشغيل» وانقر على Dune: سترى Children of Dune وDune تحت عنوان More by Frank Herbert.

جرّب بنفسك

{% 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس النماذج ولوحة الإدارة

تدرّب بنفسك: Playground لـ Django