【问题标题】:How to check if items in cart exists or not如何检查购物车中的商品是否存在
【发布时间】:2020-02-21 12:02:49
【问题描述】:

我有一个这样的购物车模型

class Cart(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='items', null=True)
    quantity = models.PositiveIntegerField(default=1)

serializers.py

class CartSerializer(serializers.ModelSerializer):
    image = serializers.ImageField(source='product.image', read_only=True)
    name = serializers.CharField(source='product.name', read_only=True)
    price = serializers.DecimalField(source='product.price', read_only=True, max_digits=10, decimal_places=2)
    class Meta:
        model = Cart
        fields = ['id', 'user', 'product', 'image', 'name', 'price', 'quantity']

views.py

class CartApiView(generics.ListCreateAPIView):
    queryset = Cart.objects.all()
    serializer_class = CartSerializer



def post(self, request, pk=None, *args, **kwargs):
    serializer = CartSerializer(data=request.data)

if serializer.is_valid():
    product = Product.objects.get(pk=request.data['product'])
    #quantity = int(request.data['quantity'])
    while Cart.objects.filter(product=product).exists():
        quantity += 1
        serializer.save(user=self.request.user)
    return Response(serializer.data)

在将产品添加到我的购物车之前,我想检查一下该产品是否存在。如果存在,它应该更新数量,如果没有新的购物车项目应该添加到购物车。简而言之,首先我应该在添加之前检查。但在此模型中,quantity 具有默认值。如果用户不添加数量,它应该 1. 我该如何编写这个方法?提前致谢!

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    这是一个简单的查询。

    Cart.objects.filter(user=user, product=product).exists()
    

    您使用要检查的userproduct。如果您愿意,您甚至可以包括数量:

    Cart.objects.filter(user=user, product=product, quantity=1).exists()
    

    或:

    Cart.objects.filter(user=user, product=product, quantity__gte=1).exists()
    

    如果你还包括你尝试过的“方法”会很有用。因为这个答案很简单明了。所以也许你忘了提别的东西。

    【讨论】:

    • 请看一下我已经添加了一个方法,但是在这个视图中不起作用。
    • @Nerd 我认为您需要更改您的问题。因为您问“如何检查是否存在”,但您似乎想更新购物车
    • 请看这里。我是 Django 新手,这就是为什么我不清楚的原因让我知道然后我会添加
    • 但现在您似乎想检查产品是否存在。您想检查产品是否存在或产品是否存在于特定用户的购物车中?
    • 是的,当然每个用户在注册时都有自己的购物车。这就是为什么此购物车适用于每个特定用户的原因。我该如何解决这个问题?
    【解决方案2】:

    试试这个

    qs = Cart.objects.filter(product=product)
    exists = qs.exists()
    if exists:
      do sth
    else:
      do sth
    

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2011-04-09
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多