如何检查购物车中的物品是否存在

时间:2019-10-25 06:33:40

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

我有这样的购物车模型

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.如何编写此方法?提前致谢!

2 个答案:

答案 0 :(得分:0)

这是简单的查询。

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()

您还应该包括尝试过的“方法”,这将很有用。因为此答案很简单明了。所以也许您忘记提及其他内容了。

答案 1 :(得分:0)

尝试这个

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