@dima_lenk0v

Как переопределить multiplechoicefilter, чтобы он фильтровал не только по всем выбранным value, но и чтобы был фильтр по доп.параметру?

Использую djano-filter для фильтрации по определённым полям. У моей модели есть поле район, которое я фильтрую используя multiplechoicefilter. Всё работает правильно, если я выбираю несколько районов, то всё срабатывает правильно.
Но мне нужно расширить работу данного метода так, чтобы он искал не только по value, но и чтобы если в бд указано вместо определённого района слово "любой", то он учитывал это. То есть если человек выбирает "московский" район, то он будет выводить записи где написано и "московский" и "любой". Не нашёл в документации как этом можно сделать с данным фильтром.

Пытался задать собственный method , но безуспешно. Когда у меня был просто choicefilter , вместо multiple, то всё получилось. Здесь же я не знаю, как это сделать.

Вот мой код из filters.py
class DailyOrdersFilter(django_filters.FilterSet):
    STATUS_CHOICES4 = (
        ('Советский', 'Советский'),
        ('Приволжский', 'Приволжский'),

    district_kazan = django_filters.MultipleChoiceFilter(field_name='district', choices=STATUS_CHOICES4,
                                                         label='Требуемый район', lookup_expr='icontains')


Попробовал спуститься во внутрь multiplechoicefilter и там написано, что данный метод можно переопределить под себя изменив класс "get_filter_predicate"

def get_filter_predicate(self, v):
        name = self.field_name
        if name and self.lookup_expr != settings.DEFAULT_LOOKUP_EXPR:
            name = LOOKUP_SEP.join([name, self.lookup_expr])
        try:
            return {name: getattr(v, self.field.to_field_name)}
        except (AttributeError, TypeError):
            return {name: v}

Но я не совсем понимаю, как. Помогите пожалуйста!
  • Вопрос задан
  • 384 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы