不允许Django rest框架更新Put

不允许Django rest框架更新Put,django,django-rest-framework,Django,Django Rest Framework,我试图更新数据库的一个对象(但只更新其中一个字段),问题是当我尝试进行更新时,会出现一个错误,表明不允许使用PUT方法 以下是我的看法: class DeviceViewSet(viewsets.ModelViewSet): """ Show, create and filter devices. """ queryset = Device.objects.all() serializer_class = DeviceSerializer def

我试图更新数据库的一个对象(但只更新其中一个字段),问题是当我尝试进行更新时,会出现一个错误,表明不允许使用PUT方法

以下是我的看法:

class DeviceViewSet(viewsets.ModelViewSet):
    """
    Show, create and filter devices.
    """
    queryset = Device.objects.all()
    serializer_class = DeviceSerializer

    def list(self, request, *args, **kwargs):
        devices = Device.objects.filter(user=request.user.pk, role='E')
        serializer = DeviceSerializer(devices, many=True)
        return Response(serializer.data)

    def create(self, request, *args, **kwargs):
        data = {
            'registration_id': request.data['regId'], 'user': request.user.pk, 'device_id': request.data['imei'],
            'type': 'android', 'label': request.data['label'], 'role': request.data['role']
        }
        serializer = DeviceSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            device = Device.objects.filter(device_id=request.data['imei'])
            device.send_message("Enhorabuena!", "El dispositivo se ha registrado correctamente.")
            return Response(serializer.data)
        return Response(serializer.errors)

    def update(self, request, *args, **kwargs):
         device = Device.objects.filter(device_id=request.data['imei'])
         device.registration_id = request.data['regId']
         device.save()
         serializer = DeviceSerializer(device)
        return Response({'ok': 'oks'})
我的序列化程序:

class DeviceSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), required=False)

    class Meta:
        model = Device
        fields = '__all__'
我的网址:

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns

from decaught import views

urlpatterns = [
    url(r'^devices/$', views.DeviceViewSet),

]

urlpatterns = format_suffix_patterns(urlpatterns)
我正在使用邮递员发送PUT请求:


知道怎么回事吗?

错误在我们的URL中。您需要选择一些
设备
来放置信息。尝试使用
localhost:8000/devices/1/
。我假设您的API通过pk获取对象,当
放置
时,资源标识符应该在URL(pk)中。PUT请求是幂等的。

在DRF文档中,pk作为参数传递给update方法

def update(self, request, pk=None):
    pass

而不是将其作为key:value对传递,并通过
request.data
PUT调用访问它

localhost:8000/devices/<PK-HERE>/
localhost:8000/台设备//

(很抱歉英语不太好)

错误在我们的URL中。您需要选择一些
设备
来放置信息。尝试使用
localhost:8000/devices/1/
。我假设您的API通过pk获取对象