2015-02-24 2 views
3

Я хочу создать фильтр ИЛИ в моем django_filters. Все фильтры с отличным, за исключением моего имени продукта.Создать фильтр ИЛИ с django_filters

У меня есть поисковый запрос, в котором необходимо найти имя продукта в столбце name_nl, name_en и name_fr.

Как создать или фильтровать с помощью Django_filter?

class ProductFilter(django_filters.FilterSet): 
status = django_filters.CharFilter(name='productvariant__status_id', lookup_type='exact') 
productname = django_filters.CharFilter(name='name_nl', lookup_type='icontains') 

class Meta: 
    model = Product 
    fields = { 
     'productname': ['icontains'], 
     'status': ['exact'] 
    } 

ответ

-2

Вы можете использовать Q() objects.

Из документации:

Poll.objects.get(
    Q(question__startswith='Who'), 
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) 
) 

Дает что-то вроде:

SELECT * from polls WHERE question LIKE 'Who%' 
    AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06') 
+0

На самом деле спрашивающий говорит об этом: http://django-filter.readthedocs.org/en/latest/index.html – ruddra

+0

В этом случае он может хотеть читайте: https://github.com/alex/django-filter/issues/137 – cdvv7788

+0

На самом деле я хочу, чтобы такой фильтр (ширина django_filter): http://example.com/api/products?name_nl=search_string, name_fr = search_string, name_en = search_string Я уже использую объекты Q() где-то еще в своем приложении. Но здесь мне нужно использовать django_filter ... – RVE

3

Вы можете сделать это, как это.

import django_filters 
from django.db.models import Q 

from app.models import User 

class UserFilter(django_filters.FilterSet): 

    q = django_filters.MethodFilter() 

    class Meta: 
     model = User 
     fields = [] 

    def filter_q(self, queryset, value): 
     return queryset.filter(
      Q(last_name__icontains=value) | Q(first_name__icontains=value) | Q(email__icontains=value) 
     ) 

Затем сделайте общий вид.

from django_filters.views import FilterView 

from .filters import UserFilter 

class AgentListView(ClassRequiredMixin, FilterView): 

    filterset_class = UserFilter 

Для шаблона см http://django-filter.readthedocs.org/en/latest/usage.html#the-template

Смежные вопросы