Почему запрос PUT не обновляет базу данных фреймворка Django rest?

Я пытаюсь обновить базу данных с помощью PUT-запроса. В настоящее время я могу успешно обновить базу данных из Django Admin, но я хочу сделать то же самое, используя PUT запрос.

Когда я делаю запрос PUT, я получаю ответ 200 OK без ошибок, но данные не обновляются в базе данных. Я не знаю почему. Я запутался. Кто-нибудь, пожалуйста, помогите мне. Спасибо.

models.py

class User_Order(models.Model):
    order = models.OneToOneField(Orders, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    id = models.IntegerField(primary_key=True)
    shirts = models.IntegerField(default=0)
    shorts = models.IntegerField(default=0)
    trousers = models.IntegerField(default=0)

    total_units = models.CharField(max_length=2000, blank=True)
    
    shirts_amount = models.CharField(max_length=2000, blank=True)
    shorts_amount = models.CharField(max_length=2000, blank=True)
    trousers_amount = models.CharField(max_length=2000, blank=True)
    
    total = models.CharField(max_length=200,blank=True)
    
    

    verified = models.BooleanField(null=True)
    doing_laundry = models.BooleanField(null=True)
    delivery_underway = models.BooleanField(null=True)
    delivered = models.BooleanField(null=True)

    address = models.TextField(default='')

    time = models.DateTimeField(auto_now=True)
    
    
    def save(self, *args, **kwargs):
        self.user = self.order.user
        self.id = self.order.id
        self.shirts = self.order.shirts
        self.shorts = self.order.shorts
        self.trousers = self.order.trousers
        self.total_units = self.order.total_units
        self.shirts_amount = self.order.shirts_amount
        self.shorts_amount = self.order.shorts_amount
        self.trousers_amount = self.order.trousers_amount
        self.total = self.order.total
        self.verified = self.order.verified
        self.doing_laundry = self.order.doing_laundry
        self.delivery_underway = self.order.delivery_underway
        self.delivered = self.order.delivered
        self.address = self.order.address

        super().save(*args, **kwargs)

    def __str__(self):
        return f'{self.order.user.username} Order'

serializers.py

class UserUser_OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = User_Order
        fields = '__all__'

views.py

@api_view(['PUT'])
def UserOrdersUpdate(request, pk):
    permission_classes = [IsAuthenticated]
    user_order = User_Order.objects.get(id=pk)
    if request.method == 'PUT':

        serializer = UserUser_OrderSerializer(instance=user_order, data=request.data, many = False, partial=True)

    if serializer.is_valid():
        serializer.save()

    return Response(serializer.data)

Возможно, это потому, что в методе User_Order.save() вы заменяете все поля из User_Order, где хранятся все данные из сериализатора, на значения экземпляра Order.

Также вы можете использовать представление на основе класса UpdateAPIView для упрощения:

class UserOrdersUpdateView(generics.ListCreateAPIView):
    queryset = User_Order.objects.all()
    serializer_class = UserUser_OrderSerializer
    permission_classes = [IsAuthenticated]

Docs:

UpdateAPIView

Используется для конечных точек обновления только для одного экземпляра модели. Предоставляет обработчики методов put и patch. Расширяет: GenericAPIView, UpdateModelMixin.

.
Вернуться на верх