【发布时间】:2020-04-23 08:40:55
【问题描述】:
我有两个模型,书籍和流派。
class Book(models.Model):
title = models.CharField(max_length=300)
author = models.CharField(max_length=100)
year = models.IntegerField()
genre = models.ForeignKey('Genre', on_delete=models.CASCADE)
class Genre(models.Model):
title = models.CharField(max_length=20)
在我的网页上,我想显示每种类型,并且在每种类型中,仅显示年份为 1950 年或更晚的书籍。我的模板中的代码如下所示:
{% for genre in genres %}
<h1> {{genre.title}} </h1>
{% for book in genre.book_set.all %}
{{book.title}}
{% endfor %}
{% endfor %}
这样做的问题是它显示了该类型的所有书籍,而不仅仅是 1950 年之后出版的书籍。是否可以以某种方式过滤genre.book_set.all 的结果以仅获得匹配的那些某个属性?
编辑 1
我的观点是这样的:
def books_home(request):
books = Book.objects.filter(year__gt='1950')
genres = Genre.objects.all()
return render(request, "index.html", {"books": books, "genres": genres})
即在这个阶段我试图过滤掉书籍,但它没有进入模板。
【问题讨论】:
-
嗨 Andrew,您能更新一下以显示您的视图代码吗?因为它在您传递给模板的上下文中看起来像一个问题。你认为你所拥有的看起来不错。我只是不会那样在上下文中传递。
-
完成。抱歉,我应该在原帖中包含此内容。
标签: django templates filter foreign-keys nested-loops