首页 > 解决方案 > Django REST ViewSet 创建

问题描述

我有一个员工视图集,我想在其中添加创建定义,这样我就可以设置employer=request.user.pk 并添加员工(用户)。

我尝试过创建定义(请参见下面的代码),但序列化程序始终无效,因此它返回状态 400。我不知道是不是我,但似乎缺少关于 create 函数的文档,所以我可以' t弄清楚如何正确地做到这一点。有任何想法吗?

class EmployeeViewSet(viewsets.ModelViewSet):
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer

    def list(self, request):
        queryset = self.queryset.filter(employer=request.user.pk)
        serializer = CustomUserSerializer(queryset, many=True)
        return Response(serializer.data)

    def create(self, request):
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            CustomUser.objects.create_user(**serializer.validated_data)
            return Response(serializer.validated_data, status=status.HTTP_201_CREATED)

        return Response({'status': 'Bad Request',
                         'message': serializer.is_valid()},
                          status=status.HTTP_400_BAD_REQUEST)

标签: pythondjangodjango-rest-framework

解决方案


将方法重写perform_create为,

class EmployeeViewSet(viewsets.ModelViewSet):
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer

    def get_queryset(self):
        return CustomUser.objects.filter(employer=self.request.user.pk)

    def perform_create(self, serializer):
        serializer.save(employer=self.request.user)

推荐阅读