Menu
CoddyTech

İlişkili Adlar

Coddy'nin Django Journey'sinin Modeller ve Yönetim Paneli bölümünün bir parçası. Ders 17 / 23.

Bir kitabın sayfasında yazarın diğer kitapları listelenebilir. Bu, yazardan kitaplarına geri gitmek anlamına gelir: ForeignKey her iki yönde de çalışır. Bir kitaba işaret eden Loan ile loan.book ileri yönde erişim sağlar; Django, ters yönde erişim için Book modeline, model adının sonuna _set eklenerek oluşturulan bir yönetici ekler: book.loan_set.all(). related_name daha iyi bir ad vermenizi sağlar:

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

Artık book.loans.all() o kitaba ait ödünç alma kayıtlarını döndürür, book.loans.count() Loan.objects üzerindeki gibi çalışır ve loan_set artık mevcut değildir.

Şablonlarda ilişkiler nokta kullanılarak izlenir ve yöntemler parantez olmadan çağrılır: Bir kitabın sayfasında {% for loan in book.loans.all %} o kitaba ait ödünç alma kayıtlarını listeler. Adı yanlış yazarsanız hiçbir şey görünmez ve hata da verilmez; bu yüzden bir liste boş çıktığında önce adları kontrol edin.

challenge icon

Görev

Kolay

Her kitabın sayfasında yazarın diğer kitaplarını listele.

  1. books/models.py dosyasında, Book.author için ilişkili adı books olarak ayarla; böylece author.books.all() bu yazarın tüm kitaplarını döndürür.
  2. book_detail.html dosyasında, Geri bağlantısının üstüne <h2> gibi More by Frank Herbert ve bu yazara ait her kitabı kendi sayfasına bağlantı olarak listeleyen bir <ul class="more"> ekle.

“Oyna”ya bas ve Dune'a tıkla: More by Frank Herbert başlığının altında Children of Dune ve Dune'u görürsün.

Kendin dene

{% 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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Modeller ve Yönetim Paneli bölümündeki tüm dersler

Kendi başına pratik yap: Django playground