不允许Django rest框架更新Put
我试图更新数据库的一个对象(但只更新其中一个字段),问题是当我尝试进行更新时,会出现一个错误,表明不允许使用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
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获取对象