繁体   English   中英

如何在序列化程序(帖子)中将多个相同项目添加到购物车?

[英]How do I add to cart more than one of the same item in the serializer (post)?

我正在尝试制作这个应用程序,在那里我可以 select 我想购买的物品。 例如,我想将两个蛋糕添加到购物车中,但到目前为止我不能 select 超过一个。 我怎么做? 我需要更改的字段是“食物”,因为该字段具有“蛋糕”、“糕点”等选项。我希望用户能够根据需要添加任意数量的每个项目。 我尝试了 many=True 但有些事情没有解决。

到目前为止,这是序列化程序:

class OrderSerializer(serializers.ModelSerializer):
     
    class Meta:
        model = Order
        fields = '__all__'


class FoodSerializer(serializers.ModelSerializer):

    class Meta:
        model = Food
        fields = '__all__'  

这是 model:

class Food(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

class Order(models.Model):
    food = models.ManyToManyField('Food', related_name='order', blank=True)

    def __str__(self):
        return self.food

您需要添加 model ,您可以在其中添加可以订购的商品数量:

class OrderFood(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                            on_delete=models.CASCADE) 
    ordered = models.BooleanField(default=False)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

    def __str__(self):
        return f"{self.quantity} of {self.item.title}"

然后您可以在视图中的订单中添加或删除项目(或食物类型):

class AddToCartView(APIView):
    def post(self, request, *args, **kwargs):
        item_id = request.data.get('id', None)
        if item_id is None:
            return Response({"message": "Invalid request"}, status=HTTP_400_BAD_REQUEST)

        item = get_object_or_404(Item, id=item_id)

        order_item = OrderFood.objects.filter(item=item,user=request.user)

        if order_item.exists():
            order_item = order_item.first()
            order_item.quantity += 1
            order_item.save()
        else:
            order_item = OrderFood.objects.create(item=item,user=request.user)
            order_item.save()

不是 100% 确定代码,您需要验证它,希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM