我有这样的购物车模型
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.如何编写此方法?提前致谢!
答案 0 :(得分:0)
这是简单的查询。
Cart.objects.filter(user=user, product=product).exists()
您使用要检查的user
和product
。您甚至可以根据需要添加数量:
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