我有一個模型書可以添加到用戶的收藏夾。所以我定義的2類:Django模板用戶請求
class Book(models.Model):
name = models.CharField(max_length = 40)
class UserFavorite(models.Model):
book = models.ForeignKey(Book)
user = models.ForeignKey(User)
現在我想顯示在主菜單頁的暢銷書帶圖標或者「添加到收藏夾」或「從收藏夾中刪除」。基本上,我將流行的書籍數組傳遞給一個模板,並從模板中循環這個數組,並應該說「如果book.is_in_favorites(request.user):...」,但這不可能從模板中獲得。
1)我必須在Book模型中定義is_fav嗎?或者這會添加一個「即時」字段? 2)方法很好,雖然它需要運行許多選擇語句(一個用於所有書籍,然後每個書籍用於is_fav),這會影響性能。可能有什麼辦法做到這一點,只有一個查詢獲取所有的書籍? – Vitaly 2009-08-16 18:45:40
事實上,我發現有「額外」的條款,可以動態地添加屬性,我會盡量利用它 – Vitaly 2009-08-16 18:55:55
如果你想避免for語句引起的重複查找(並且因爲select_related *不會*在這裏幫助)您可以調用UserFavorites.objects.filter(user = request.user),並將您的書籍迭代與返回的UserFavorites集合進行比較。然後它只有2個數據庫點擊。 – 2009-08-16 18:57:20