django -фильтр для поиска по нескольким полям и моделям - PullRequest
0 голосов
/ 13 июля 2020

Я ищу способ отфильтровать два входа ( имя и место ) из двух моделей (Фотограф и Местоположение ); но MultipleChoiceFilter, похоже, не работает для меня, потому что мне нужно добавить больше сложных logi c, которые работают в моем настраиваемом фильтре, как показано ниже.

from django.db.models import Q
from django_filters import rest_framework as filters


class SearchResultFilter(filters.FilterSet):
    name = filters.CharFilter('Photographer')
    place = filters.CharFilter(method='location_filter', distinct=True)

    class Meta:
        model = models.Photographer
        fields = ('name')

   def location_filter(self, queryset, name, value):
       """My complex logic"""
         .
         .
         .
       model = models.Location.filter(Q(location__icontains=value))
       return model

Вопрос в том, "Есть ли способ поместить имя поле ввода в свой location_filter, чтобы я мог отфильтровать два ввода ( имя и поместите ) в эту функцию и верните требуемый querySet отсюда ».

Я попытался использовать self.name в location_filter; однако был создан журнал ошибок. Полагаю, «имя» здесь не переменная класса

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете повторить c поведение Django встроенного множественного поиска, используя ?q=<value>

from django.db.models import Q

def multiple_search(queryset, name, value):
    queryset = queryset.filter(Q(name__icontains=value) | Q(place__icontains=value))
    return queryset

class SearchResultFilter(django_filters.FilterSet):
    ...
    <b>q = django_filters.CharFilter(label='name or place', method=multiple_search)</b>
...