我有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%中的产品}
但是我不知道如何获得所有喜欢的产品而不是喜欢的东西
我如何在模板中解决它?
答案 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
。
您可能希望将False
和user
的组合与UniqueConstraint
[Django-doc]唯一,以防止用户向request.user
多次添加相同的产品:
product
注意:与直接使用
settings.AUTH_USER_MODEL
[Django-doc]相比,通常最好使用User
model [Django-doc]来引用用户模型。有关更多信息,请参见referencing theUser
model section of the documentation。