只有在點擊ListView中的作者姓名時,才應顯示作者的書籍。
models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.text import slugify
class Author(models.Model):′。
author = models.ForeignKey(User, on_delete=models.CASCADE)
slug = models. SlugField(unique=True, blank=False, null=False)
class Book(models.Model) 。
author = models.ForeignKey(Author, on_delete=models. CASCADE, null=False, blank=False)
title = models.CharField(max_length=200)
價格 = models.FloatField()
image = models.ImageField(null=True,blank=True)
views.py
from app.models import Book, Author
from django.shortcuts import render, redirect
from django.contrib.auth.models import User, Group
from django.view.gener.list import ListView
from django.views.gener.detail import DetailView
class HomeView(ListView)。
模型 = 作者
排序 = ['-id']
模板名稱 = 'app/home.html']
class AuthorView(DetailView)。
模型=作者
模板名稱 = 'app/author.html': 模型 = Author
def get_context_data(self, *args, **kwargs)。
# author_pk = self.kwargs.get('pk', None).
# Tried this logic, but it makes no sense after I looked at it more close.
books = Book.objects.all()
if books.author is Author.pk。
books_filtered = books.objects.all()
context = super(AuthorView, self).get_context_data(*args, **kwargs)
context['books'] = books_filtered
return context
現在,當所有的作者都用ListView顯示在主頁上時,當有人點擊某個作者時,他們應該只看到該作者用DetailView
這個鏈接我試過了,但它只能顯示所有的書
。uj5u.com熱心網友回復:
你可以使用self.object來過濾書籍:
def get_context_data(self, *args, **kwargs)。
books = Book.objects.filter(author=self.object)
...
uj5u.com熱心網友回復:
你不需要把這個傳給模板。在模板中,你可以使用:
{% for book in object.book_set.all %}
{{book.title}}
{% endfor %}
這里的object是指Author,我們為其檢索書籍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323529.html
標籤:
