Поиск по списку APIView в Django Rest API - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу отфильтровать представление списка с помощью API View.Но это не фильтрация по запросу.Как я могу сделать поисковый запрос.Может ListAPIView метод будет POST

# Jobs API
    class JobsListAPIView(generics.ListAPIView):
        serializer_class = JobListSerialzer
        # pagination_class = ListLimitOffsetPagination
        permission_classes = [UserIsAuthenticated]

        def get_queryset(self, *args, **kwargs):
            # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id)

            qs = Jobs.objects.exclude(job_is_deleted = True).filter(
                job_company = self.request.auth.application.company
            )

            query = self.request.data.get("query")
            print('query: ', query)

            if query:
                qs = qs.filter(job_status=query)

            return qs

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Прежде всего,

Вы фильтруете данные два раза.В этом нет необходимости, потому что это пустая трата времени и памяти.

class JobsListAPIView(generics.ListAPIView):
    serializer_class = JobListSerialzer
    # pagination_class = ListLimitOffsetPagination
    permission_classes = [UserIsAuthenticated]

    def get_queryset(self, *args, **kwargs):
        # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id)


        query = self.request.data.get("query")
        print('query: ', query)

        if query:
            qs = Jobs.objects.exclude(job_is_deleted = True).filter(job_status=query, job_company = self.request.auth.application.company)
       else:
            qs = Jobs.objects.exclude(job_is_deleted = True).filter(job_company = self.request.auth.application.company
       )

        return qs
0 голосов
/ 18 февраля 2019

Попробуйте

class JobsListAPIView(generics.ListAPIView):
     serializer_class = JobListSerialzer
      # pagination_class = ListLimitOffsetPagination
     permission_classes = [UserIsAuthenticated]

     def get_queryset(self, *args, **kwargs):
            # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id)

            qs = Jobs.objects.all()
            # if using body data json
            query = self.data.get("query")
            # else
            query = self.request.query_params.get("query")

        if query is not None:
            qs = qs.filter(job_status=query, job_company = self.request.auth.application.company).exclude(job_is_deleted = True)

        return qs

надеюсь, что это поможет

для получения более подробной информации перейдите по этой ссылке

...