簡體   English   中英

Django。 如何找出用戶喜歡或不喜歡帖子?

[英]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如果存在給定userFavorite則為True ,否則為False

可能的userrequest.user

您可能希望使用UniqueConstraint [Django-doc]使productuser的組合唯一,以防止用戶將相同的產品多次添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM