2016-05-31 5 views
2

Я использую Django Rest Framework Filter для доступа к моим данным. Мне нужно получить данные, которые отвечают одному из двух условий. Пример:Django rest framework filter with or condition

Mywebsite/api/animal/?name=lion||name=frog 

|| не работает. Кто-нибудь знает, как я могу сделать этот фильтр?

+0

сообщение ваши журналы ошибок. – Lee

+0

У меня нет журнала ошибок. Он просто не повторяет никаких результатов. Он не должен возвращать результаты, потому что это не правильный способ сделать это. Мой вопрос: какой способ написать этот запрос? – ron

+0

Используется ли этот вариант: [Фильтры DRF] (https://github.com/philipn/django-rest-framework-filters)? Если да, напишите FilterSet, который вы определили. – C14L

ответ

0

Я понимаю, что это, возможно, немного старый, но я решил так:

from django.db.models import Q 


class FooViewSet(viewsets.ModelViewSet): 
    queryset = Foo.objects.all() 
    status = self.request.query_params.get('status', None) 

    def get_queryset(self): 
     if status is not None: 
      status = status.split('|') 
      query = Q() 
      for x in status: 
       q = Q(status=x) 
       query |= q 
      queryset = queryset.filter(query) 
     return queryset 

Мой URL будет выглядеть следующим образом:

example.com/api/foo/?status=test1|test2|test3 

и фильтры, как этот

Foo.objects.filter(Q(status=test1)|Q(status=test2)|Q(status=test3))