如何根据django

时间:2017-01-29 21:23:20

标签: python django

我想学习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(),
    })

我该如何解决?或者有什么不同的解决方案来解决这个问题吗?

谢谢.. :))

1 个答案:

答案 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>