如何在 Django REST 框架"PUT"更新请求中提供额外的数据?



这是我到目前为止所拥有的:

[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",因为它的默认值="经理",如果id=2的那个员工的"employee_type"是,让我们在我的请求后说"admin",它将变成"经理"。问题是我不知道如何在我的请求中添加一些额外的数据,以便我能够将"employee_type"更改为"导演",例如,是否可以完成以下操作?

[request_as_I_want]

http -a admin:password PUT http://localhost:8000/api/employees/list/2/employee_type='director'/company='some_value'/

这是可以做到的,还是我误解了什么?

我假设您正在使用httpie.要向 django-rest-framework 发送 PUT 请求,需要一个 URL 和 json 数据。这是一种方法(注意URL和数据之间的空格):

http -a admin:password PUT http://localhost:8000/api/employees/list/2 employee_type='director' company='some_value'

在 https://github.com/jakubroztocil/httpie#json 查看更多信息

最新更新