我有一个名为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列。
在我的模板中,最简单的方法是知道哪个小贴士已被收藏?
答案 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
中。如果是,请在它旁边放一颗星。