首页 > 解决方案 > TypeError:“ShiftSerializer”对象不可调用

问题描述

我正在尝试使用 ModelViewSet。我现在面临这个错误

这是我的观点=>

class ShiftViewSet(viewsets.ModelViewSet):
    queryset = Shift.objects.all()
    serializer_class = ShiftSerializer()

    # filter_backends = (filters.DjangoFilterBackend,)
    # filterset_fields = ('shiftid',)    

    @action(methods=['get'], detail=False)
    def newest(self, request):
        newest = self.get_queryset().order_by('Created_DT').last()
        serializer = self.get_serializer_class()(newest)
        return Response(serializer.data)

    @action(methods=['get'], detail=False)
    def shiftsum(self, request):        
        query = (
                    Shift.objects.values('shiftid')
                        .annotate(shiftdesc=Max('shiftdesc'))
                        .annotate(overnight=Max('overnight'))
                        .annotate(isspecialshift=Max('isspecialshift'))
                        .annotate(ct=Count('*'))  # get count of rows in group
                        .order_by('shiftid')
                        .distinct()
                )
        serializer = ShiftSummarySerializer(query,many=True)
        return Response(serializer.data)

    @action(methods=['get'], detail=False)
    def byshiftid(self, request):        
        shiftid = self.request.query_params.get('shiftid',None)
        query = self.get_queryset().filter(shiftid=shiftid)
        serializer = ShiftSerializer(query,many=True)
        return Response(serializer.data)

这是我的路由器和网址 =>

router.register('shifts_mas', ShiftViewSet, base_name='shifts')

 path('api/', include(router.urls))

通常我可以像 /api/shifts_mas/ 这样调用,我会得到所有记录,shift但刚才我收到了这个错误,我不知道为什么。我可以知道为什么吗?

标签: djangodjango-rest-framework

解决方案


您应该有一个序列化程序类而不是该类的实例作为您的serializer_class属性

serializer_class = ShiftSerializer  # No parenthesis here

推荐阅读