我有一个模型书可以添加到用户的收藏夹。所以我定义的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