İ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.
Görev
KolayHer kitabın sayfasında yazarın diğer kitaplarını listele.
books/models.pydosyasında,Book.authoriçin ilişkili adıbooksolarak ayarla; böyleceauthor.books.all()bu yazarın tüm kitaplarını döndürür.book_detail.htmldosyasında, Geri bağlantısının üstüne<h2>gibiMore by Frank Herbertve 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 %}
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