2014-01-22 69 views
0

我有方法的典範。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}} 

它是深藏不露..

我失去了什麼在這裏使用這種方法嗎?

+0

你爲什麼不只是通過最新的對象視圖中的上下文變量? – SunnySydeUp

+0

@SunnySydeUp,因爲我實際上是在渲染很多書。我不想單獨呈現他們的最後評論。 – doniyor

回答

3

我相信你正在嘗試檢索書(這是不是從你的問題清楚)的最新審查。有關book的相關評論可以通過book.book_reviews訪問。它是一個QuerySet而不是一個Review對象,因此{{ book.book_reviews.lastreview }}將會失敗。

我會建議直接Book下移動lastreview方法,如:

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 }} 

注意訪問一本書在你的模板的最新觀點:我建議增加一個DateTimeFieldReview,如發現基於id最新的檢討可能會產生誤導。例如,某人可以編輯舊評論,但不會顯示爲最新評論。

+0

不工作.. :(我想,我檢索它的模板的方式是不對的.. – doniyor

+0

@doniyor看到我的編輯答案 – arocks

+0

它不工作對不起 – doniyor