我想学习django,我应该根据我的模型对我的sql输入进行分类。
例如,我有一些像这样的模型:
class Author(models.Model):
authorName = models.CharField(max_length=30)
def __str__(self):
return self.authorName
class Book(models.Model):
author = models.ForeignKey(Authors, on_delete=models.CASCADE)
bookName = models.CharField(max_length=60)
downloadLink = models.FileField()
downloadCount = models.IntegerField(default=0)
def __str__(self):
return self.bookName
我想在我的.html文件中输出这样的输出;
夏洛克·福尔摩斯
Suzanne Collins
我在我的html文件中尝试了这段代码,但它没有工作
<ul>
{% for author in all_authors %}
<h2>{{ author.authorName }}</h2>
{% for book in all_books %}
{% if book.author == author.authorName %}
<li><a href="{{ book.downloadLink.url }}" download="{{ book.downloadLink.url }}">{{ book.bookName }}</a></li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
我的输出是;
夏洛克·福尔摩斯
Suzanne Collins
这是我的view.py文件;
def books(request):
return render(request,'../templates/library/library-template.html', {
'all_authors': Author.objects.all(),
'all_books': Book.objects.all(),
})
我该如何解决?或者有什么不同的解决方案来解决这个问题吗?
谢谢.. :))
答案 0 :(得分:0)
您的if语句永远不会成立,您正在比较对象和字符串
{% if book.author == author.authorName %}
所以你可以改成
{% if book.author == author %}
但这仍然是浪费,你可以使用reverse lookup所以你根本不需要if语句
<ul>
{% for author in all_authors %}
<h2>{{ author.authorName }}</h2>
{% for book in author.book_set.all %}
<li><a href="{{ book.downloadLink.url }}" download="{{ book.downloadLink.url }}">{{ book.bookName }}</a></li>
{% endfor %}
{% endfor %}
</ul>