簡體   English   中英

如何更新 django rest 框架中的數據

[英]How to update data in django rest framework

我有一個購物車 model 並且我想要在 API 中,如果用戶在購物車中添加兩次相同的物品,購物車將自動增加服務數量。 就我而言,如果我兩次添加相同的商品,它會創建另一個購物車,而不是更新前一個購物車。 我搜索了很多,但我沒有得到答案。 我嘗試了很多來做到這一點。 如果有人能夠給出答案,請給出答案,請
這是我的代碼:-

視圖.py

class CartViewSet(viewsets.ModelViewSet):
    serializer_class = CartSerializer
    permission_classes = (IsAuthenticated,)
    def get_queryset(self):
        user = self.request.user
        if user.is_authenticated:
            if user is not None:
                if user.is_active and user.is_superuser or user.is_Customer:
                    return Cart.objects.all()
                raise PermissionDenied()
            raise PermissionDenied()
        raise PermissionDenied()
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['date_created', 'user']
    @action(detail=False)
    def count(self, request):
        queryset = self.filter_queryset(self.get_queryset())
        count = queryset.count()
        content = {'count': count}
        return Response(content)

序列化程序.py

class CartSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cart
        fields = ['id','url', 'user', 'service', 'defects', 'date_created', 'quantity' , 'price', 'total']

模型.py

class Cart(models.Model):
    user = models.ForeignKey('accounts.User', related_name="carts", null=True, on_delete=models.SET_NULL)
    quantity = models.IntegerField(default=1)
    service = models.ForeignKey('accounts.SubCategory',null=True,  on_delete=models.SET_NULL)
    defects = models.ForeignKey('Defects',null=True,  on_delete=models.SET_NULL)
 
    price = models.IntegerField(default=False)
    date_created = models.DateTimeField(auto_now_add=True)
    total = models.IntegerField(blank=True, null=True)    

    def __str__(self):
        return self.user.username

您必須在CartSerializer中覆蓋 create 方法,如果已經創建,您可以檢查和更新。 我會提到一些與此相關的東西

覆蓋創建方法

class CartSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cart
        fields = ['id','url', 'user', 'service', 'defects', 'date_created', 'quantity' , 'price', 'total']

    def create(self,validated_data):
        """ Create cart if not created """
        cart,created = Cart.objects.get_or_create(**validated_data)
        if not created:
           cart.quantity=cart.quantity+1
        # you have to write your own logic i give you just an hint 
        return cart

在這里,當我們在購物車 URL 上發布請求時,我們覆蓋它調用的創建方法,此時我們可以更改創建購物車 object 的流程

希望您理解,如果您有任何疑問,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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