Ошибка создания объединенных запросов с помощью Q () и filter () в наборе с djangoORM - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь создать фильтр с несколькими элементами в наборе запросов для MOdelViewSet. Я перезаписываю метод get_queryset для получения результатов в соответствии с ролью пользователя.

Я использую Q () и отлично работает, когда я пытаюсь использовать один фильтр, например:

 Cohort.objects.filter(Q(mode="p") )

или это:

 Cohort.objects.filter(Q(participant__user__id=self.request.user.id))

Оба работают отличноотфильтровываю набор запросов, но когда я объединяю, тогда как это ...

Cohort.objects.filter(
                Q(participant__user__id=self.request.user.id) |
                Q(mode="p")
           )

Набор запросов умножает количество реестров и приводит ко многим результатам, повторяющимся результатам, до такой степени, что запрос не выполняется.

Это полный метод:

    def get_queryset(self):
        user_role = self.request.user.rol

        if user_role == '0':
            base_qs=Cohort.objects.all()
        elif user_role == '1':
            base_qs=Cohort.objects.filter(
                Q(participant__user__id=user.id)
            )
        elif user_role == '2':
            base_qs = Cohort.objects.filter(
                Q(participant__user__id=self.request.user.id) |
                Q(mode="p")
            )

        scope = self.request.query_params.get('isNext', None)

        if scope is None:
            return base_qs
        elif scope:
            return base_qs.filter(fecha_final > datetime.date.today())
        return base_qs.filter(fecha_final < datetime.date.today())

Я не получаю никаких сообщений об ошибках. проверка документации это способ использования Q, но что-то происходит. Что я делаю неправильно? Я использую

Django == 2.2.4

djangorestframework == 3.10.2

...