在Django对象中标记收藏夹

2024-06-16 10:44:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

在我的模板中,最容易做的事情是什么来知道哪一个技巧最受青睐?在


Tags: 用户id应用程序modelmodelslistclassforeignkey
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中。如果是,在旁边放一颗星星。在

我假设您希望显示一个提示列表,对于每个提示,您需要知道这是否是当前用户的最爱。在

如果您确实想在模板级别执行此操作,可以使用自定义的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]

然后在模板中:

^{pr2}$

相关问题 更多 >