[英]How to provide additional data in “PUT” request for update in Django REST Framework?
这是我到目前为止的内容:
[serializers.py]
class EmployeeSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
user = UserSerializer(required=False)
company = serializers.CharField(read_only=True)
employee_type = serializers.ChoiceField(choices=EMPLOYEE_TYPES, default='manager')
is_blocked = serializers.BooleanField(required=False)
def update(self, instance, validated_data):
instance.user = validated_data.get('user', instance.user)
instance.company = validated_data.get('company', instance.company)
instance.employee_type = validated_data.get('employee_type', instance.employee_type)
instance.is_blocked = validated_data.get('is_blocked', instance.is_blocked)
instance.save()
return instance
[views.py]
class EmployeeDetail(APIView):
def get_employee(self, pk):
try:
return Employee.objects.get(pk=pk)
except Employee.DoesNotExist:
raise Http404
def put(self, request, pk, format=None):
employee = self.get_employee(pk)
serializer = EmployeeSerializer(employee, data=request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
else:
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
[请求]
http -a admin:password PUT http://localhost:8000/api/employees/list/2/
结果,我能够更新id = 2的那个雇员,但是我唯一可以更改的是“ employee_type”,因为它的默认值是“ manager”,并且如果那个id ==的雇员的“ employee_type” 2是说“ admin”,我的请求将成为“ manager”。 问题是我无法弄清楚如何向请求中添加一些额外的数据,因此我可以将“ employee_type”更改为“ director”,例如,可以完成以下操作吗?
[request_as_I_want]
http -a admin:password PUT http://localhost:8000/api/employees/list/2/employee_type='director'/company='some_value'/
是可以做到的,还是我误会了什么?
我认为您正在使用httpie
。 要将PUT请求发送到django-rest-framework,需要一个URL和json数据。 这是一种方法(请注意URL和数据之间的空间):
http -a admin:password PUT http://localhost:8000/api/employees/list/2 employee_type='director' company='some_value'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.