[英]Django. How to find out a user liked a post or didn't?
我有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"""
...
在模板中我有:
{% for product in products %}...
我想我可以這樣做 {% if product in user.favorites.all %}
但我不知道如何獲得所有最喜歡的產品而不是最喜歡的
我如何在模板中解決它?
我如何在模板中解決它?
不要在模板中解決這個問題。 模板應該實現呈現邏輯,而不是業務邏輯。 Django 的模板語言故意限制語法以防止人們在模板中編寫復雜的邏輯。
您可以使用Exists
子查詢 [Django-doc]注釋QuerySet
以檢查用戶是否:
from django.db.models import Exists, OuterRef
Product.objects.annotate(
is_favorite=Exists(
Favorite.objects.filter(user=, product_id=OuterRef('pk'))
)
)
從此查詢集中產生的Product
將有一個額外的屬性.is_favorite
如果存在給定user
的Favorite
則為True
,否則為False
。
可能的user
是request.user
。
您可能希望使用UniqueConstraint
[Django-doc]使product
和user
的組合唯一,以防止用戶將相同的產品多次添加到Favorite
:
from django.conf import settings
class Favorite(models.Model):
"""User favorite products"""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='favorites'
)
product = models.ForeignKey(
Product,
on_delete=models.CASCADE,
related_name='favorites'
)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'product'], name='favorite_once')
]
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用戶 model 比直接使用User
model [Django-doc] 更好。 有關更多信息,您可以查看參考文檔的User
model部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.