Python 德扬戈。如何找到用户喜欢或不喜欢的帖子';T

Python 德扬戈。如何找到用户喜欢或不喜欢的帖子';T,python,django,django-models,django-templates,Python,Django,Django Models,Django Templates,我有两个模型。产品和最爱(有点像) 收藏夹与产品和用户有关系。 我需要在模板中检查用户是否与插入类似或不同按钮的产品有关系 类收藏夹(models.Model): “”“用户喜爱的产品”“” user=models.ForeignKey(用户,在_delete=models.CASCADE上,相关的_name='favorites') product=models.ForeignKey(产品,在_delete=models.CASCADE上,相关的_name='favorites') 类别产品(

我有两个模型。产品和最爱(有点像)
收藏夹与产品和用户有关系。 我需要在模板中检查用户是否与插入类似或不同按钮的产品有关系

类收藏夹(models.Model):
“”“用户喜爱的产品”“”
user=models.ForeignKey(用户,在_delete=models.CASCADE上,相关的_name='favorites')
product=models.ForeignKey(产品,在_delete=models.CASCADE上,相关的_name='favorites')
类别产品(型号.型号):
“存储产品”
...
在模板中,我有:
{products%中产品的%s}

我想我可以这样做 {%if产品在user.favorites.all%}
但我不知道如何得到所有喜欢的产品,而不是最喜欢的

如何在模板中解决它

如何在模板中解决它

不要在模板中解决此问题。模板应该实现呈现逻辑,而不是业务逻辑。Django的模板语言故意限制语法,以防止人们在模板中编写复杂的逻辑

您可以使用注释对
QuerySet
进行注释,以检查用户是否:

from django.db.models import Exists, OuterRef

Product.objects.annotate(
    is_favorite=Exists(
        Favorite.objects.filter(user=user, product_id=OuterRef('pk'))
    )
)
注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见

如何在模板中解决它

不要在模板中解决此问题。模板应该实现呈现逻辑,而不是业务逻辑。Django的模板语言故意限制语法,以防止人们在模板中编写复杂的逻辑

您可以使用注释对
QuerySet
进行注释,以检查用户是否:

from django.db.models import Exists, OuterRef

Product.objects.annotate(
    is_favorite=Exists(
        Favorite.objects.filter(user=user, product_id=OuterRef('pk'))
    )
)
注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


谢谢,但我有个问题。我应该在哪里写queryset注释?在将
产品
传递到模板的视图中。还有一个问题。我通过表达式-category.products获得这些产品。因此,我将CategoryList作为一个视图,它为我提供了一个类别,在模板中,我从每个类别中获取产品。我应该如何更改此案例的代码
class CategoryList(ListView):“Return categories and random ad”“”model=Category template\u name='store/Category.html'context\u object\u name='categories'
@Hahan't:
产品在哪里。也许值得问一个新问题并分享当前视图、模板等。谢谢,但我有一个问题。我应该在哪里写queryset注释?在将
产品
传递到模板的视图中。还有一个问题。我通过表达式-category.products获得这些产品。因此,我将CategoryList作为一个视图,它为我提供了一个类别,在模板中,我从每个类别中获取产品。我应该如何更改此案例的代码
class CategoryList(ListView):“Return categories and random ad”“”model=Category template\u name='store/Category.html'context\u object\u name='categories'
@Hahan't:
产品在哪里。也许值得提出一个新问题并分享当前的视图、模板等。