Django Rest Framework中正确更新嵌套的序列化程序

2024-10-02 06:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用django rest framework我试图实现一个嵌套序列化程序的更新方法。如何正确实现嵌套序列化程序的更新方法?在

我正在尝试更新现有员工,但得到以下响应:

{
    "user": {
        "username": [
            "A user with that username already exists."
        ]
    }
}

我在序列化程序上实现了一个update方法,只是为了更新用户字段。在

^{pr2}$

然后在视图中,我实现了以下内容:

class EmployeeDetailView(APIView):
    permission_classes = [AllowAny]
    # queryset = Employee.objects.all()
    serializer_class = EmployeeUpdateSerializer
    """
    Retrieve, update or delete a employee instance.
    """

    def get(self, request, pk, format=None):
        try:
            employee = Employee.objects.get(pk=pk)
        except Employee.DoesNotExist:
            raise Http404
        serializer = EmployeeUpdateSerializer(employee)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def put(self, request, pk, format=None):
        try:
            employee = Employee.objects.get(pk=pk)
            serializer = EmployeeUpdateSerializer(
                employee, data=request.data)
        except Employee.DoesNotExist:
            raise Http404
        # serializer = EmployeeUpdateSerializer(data=request.data)
        if serializer.is_valid():
            print(serializer.data)
            serializer.update()
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        return Response(serializer.data, status=status.HTTP_200_OK)

Tags: 方法程序datagetreturn序列化objectsrequest
1条回答
网友
1楼 · 发布于 2024-10-02 06:28:07

如果用户名验证程序已经在验证用户名字段中存在,请检查用户名。在

通过向元类添加以下内容,可以在UserSerializer中删除此验证:

        extra_kwargs = {
        'username': {
            'validators': [],
        },
    }

这是一个快速和肮脏的修复,因为如果您尝试用相同的用户名保存2个实例,它将导致数据库的完整性问题。在

相关问题 更多 >

    热门问题