django - 在模板中使用模型方法获取最新对象

时间:2014-01-22 07:20:05

标签: python django

我有一个方法模型。

class Book(models.Model):
  title = models.TextField() 

class Review(models.Model):
  content = models.TextField()
  book = models.ForeignKey(Book,related_name="book_reviews")  

  def lastreview(self):
    return self.objects.order_by('-id')[:1]

但是一旦我在模板中使用这个方法

{{book.book_reviews.lastreview.content}}
它没有显示任何内容..

我在这里失踪了什么?

1 个答案:

答案 0 :(得分:3)

我相信你正试图找回一本书的最新评论(你的问题并不清楚)。 book可以访问book.book_reviews的相关评论。它是一个QuerySet而不是一个Review对象,因此{{ book.book_reviews.lastreview }}将失败。

我建议直接在lastreview下移动Book方法,例如:

class Book(models.Model):
    title = models.TextField()

    def lastreview(self):
        try:
            return self.book_reviews.order_by('-id')[0]
        except IndexError:
            return None

现在,您可以通过

访问模板中图书的最新评论
{{ book.lastreview.content }}

注意:我建议将DateTimeField添加到Review,因为根据id查找最新评论可能会产生误导。例如,某人可以编辑旧评论,但不会显示为最新评论。