在django对象集中标记收藏夹

时间:2011-12-28 02:46:41

标签: python django

我有一个名为Tip的表和名为FavoritedTips的表。用户最喜欢的应用程序中的提示以及提示ID和用户ID将添加到favoritedTips表中。

class FavoritedTip(models.Model):
    tip = models.ForeignKey(Tip)
    user = models.ForeignKey(User)

当提示出现在列表中时,我现在需要在提示旁边放一个星号。但当然tips = Tip.objects.filter(list=list)没有tip.favoritedtip列。

在我的模板中,最简单的方法是知道哪个小贴士已被收藏?

2 个答案:

答案 0 :(得分:1)

我认为你想要显示一个提示列表,如果这是当前用户的最爱,你需要知道每个提示。

如果您真的想在模板级别执行此操作,则可以使用自定义templatetag执行此操作,但您最好在视图中构建数据结构:

tips = Tips.objects.filter(my_filters)
user_favorite_tips = request.user.favoritedtip_set.values_list('pk', flat=True)
tips = [{'tip': tip, 
         'is_favorite': tip.pk in user_favorite_tips and True or False}
         for tip in tips]

然后在你的模板中:

<ul>
{% for tip in tips %}
    <li>{{ tip.tip.as_html }} 
        {% if tip.is_favorite %} <img src="star.png" />{% endif %}</li>
{% endfor %}
</ul>

答案 1 :(得分:0)

您可以通过执行以下操作来执行2次查询:

1:创建一个set,其中包含当前用户最喜欢的提示ID

favorite_set = set(Tip.objects.filter(favoritedtip_set__user__exact=currentUser).values_list('id',flat=True))

2 :(您可能希望在模板中执行此操作)对于每个Tip对象,请检查该对象的ID是否在favorite_set中。如果是,请在它旁边放一颗星。