Django DRF REST Put方法不更新任何内容

Django DRF REST Put方法不更新任何内容,django,django-rest-framework,put,Django,Django Rest Framework,Put,在Django PUT请求中,当我每周更新位置和小时数的值时,PUT请求返回完全相同的值,并且没有更新任何内容 下面是我的代码 url url( r'^api/availability', views.AvailabilityAPIView.as_view(),name='api_availability' ) 型号 class Availability(models.Model): # Skill model which contains trainer's skill detail

在Django PUT请求中,当我每周更新位置和小时数的值时,PUT请求返回完全相同的值,并且没有更新任何内容

下面是我的代码

url

url(
r'^api/availability', views.AvailabilityAPIView.as_view(),name='api_availability'
)
型号

class Availability(models.Model):
    # Skill model which contains trainer's skill details
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    locations = models.CharField(max_length=2000)
    hours_per_week = models.IntegerField(default=0)

    def __str__(self):
        return self.locations + "|" + str(self.hours_per_week)
class AvailabilityAPIView(APIView):
    authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)

    def get(self, request):
        availability = Availability.objects.all()
        serializer = AvailabilitySerializer(availability, many=True)
        return Response(serializer.data)

    def put(self, request):
        serializer = AvailabilitySerializer(request.user, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
序列化程序

class AvailabilitySerializer(serializers.ModelSerializer):
    class Meta:
        model = Availability
        fields = ['user', 'locations', 'hours_per_week']
视图

class Availability(models.Model):
    # Skill model which contains trainer's skill details
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    locations = models.CharField(max_length=2000)
    hours_per_week = models.IntegerField(default=0)

    def __str__(self):
        return self.locations + "|" + str(self.hours_per_week)
class AvailabilityAPIView(APIView):
    authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)

    def get(self, request):
        availability = Availability.objects.all()
        serializer = AvailabilitySerializer(availability, many=True)
        return Response(serializer.data)

    def put(self, request):
        serializer = AvailabilitySerializer(request.user, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

请帮助我理解我做错了什么。我需要从url传递PK并更新特定的PK吗?

您需要传递您的
可用性
模型的实例

def put(self, request):
        instance = Availability.objects.get(user=request.user)
        serializer = AvailabilitySerializer(instance, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

就我的2美分:
partial
不应该是
True
对于
PUT
请求,它是指
补丁
请求类型。实际上,这是
PUT
PATCH
请求类型的最大区别。