Использую 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}
Но я не совсем понимаю, как. Помогите пожалуйста!