Filterset 字段不适用于多个对象

时间:2021-04-12 12:15:54

标签: django django-rest-framework

filterset 字段不适用于单个员工休假详细信息的多次休假,我该如何解决?

class LeaveApplicationGetUpdateView(RetrieveUpdateAPIView):
    serializer_class = LeaveApplicationSerializers
    queryset = LeaveApplication.objects.filter()
    permission_classes = (IsAuthenticated, IsSuperUser)
    filter_backends = [filters.OrderingFilter, DjangoFilterBackend]
    filterset_fields = ['type', 'from_date', 'to_date']

    def get(self, request, *args, **kwargs):
        contact_inf = LeaveApplication.objects.filter(employee__code=self.kwargs.get('code'))  # will be refactor
        if contact_inf:
            return Response({
                'success': True,
                'message': 'Successfully',
                'data': LeaveApplicationSerializers(contact_inf, many=True).data
            }, status=200)
        else:
            return Response({
                'success': False,
                'message': 'Not Found'
            }, status=200)

1 个答案:

答案 0 :(得分:0)

这是因为您没有调用 self.get_queryset() 来获取 LeaveApplication。所以它使得过滤器后端类不被调用。

这可能是您的解决方案:

def get(self, request, *args, **kwargs):
        contact_inf = self.get_queryset().filter(employee__code=self.kwargs.get('code'))

最好改变一下:

queryset = LeaveApplication.objects.filter()

为此:

queryset = LeaveApplication.objects.all()

还有这个:

if contact_inf:

为此:

if bool(contact_inf):

this

<块引用>

此外,如果 some_queryset 还没有被评估,但你知道它会在某个时候,那么使用 some_queryset.exists() 将做更多的整体工作(一个存在检查的查询加上一个额外的到以后检索结果)而不是使用 bool(some_queryset),后者检索结果,然后检查是否有返回。