Django的。如何找出用户喜欢或不喜欢的帖子?

时间:2020-05-25 09:18:25

标签: python django django-models django-templates

我有2个模型。产品和收藏夹(类似)
最喜欢与产品和用户的关系。 我需要检入模板,以便用户与要插入喜欢或不喜欢的按钮的产品有联系。

class Favorite(models.Model):
    """User favorite products"""
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='favorites')
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='favorites')


class Product(models.Model):
    """Store product"""
    ...

在模板中,我有:
{占产品中产品的百分比%} ...

我想我可以那样做 {%,如果user.favorites.all%中的产品}
但是我不知道如何获得所有喜欢的产品而不是喜欢的东西

我如何在模板中解决它?

1 个答案:

答案 0 :(得分:4)

如何在模板中解决它?

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

您可以用Exists subquery [Django-doc]注释QuerySet,以检查用户是否:

from django.db.models import Exists, OuterRef

Product.objects.annotate(
    is_favorite=Exists(
        Favorite.objects.filter(user=user, product_id=OuterRef('pk'))
    )
)

此查询集产生的Product将具有一个额外的属性.is_favorite,如果给定 {{1 }} ,否则为True

就像 Favorite user

您可能希望将Falseuser的组合与UniqueConstraint [Django-doc]唯一,以防止用户向request.user多次添加相同的产品:

product

注意:与直接使用settings.AUTH_USER_MODEL [Django-doc]相比,通常最好使用User model [Django-doc]来引用用户模型。有关更多信息,请参见referencing the User model section of the documentation