@DmSS1997

Не работает собственный метод для django-filter для MultipleChoiceFilter. В чём причина и как исправить?

Написал свой ChoiceFilter для одного поля с особыми условиями фильтрации. Но появилась необходимость переделать с обычно ChoiceFilter на MultipleChoiceFilter и условие работать перестало и я не вижу причин для этого.

Код из фильтра:
class DailyOrdersFilter(django_filters.FilterSet):
       STATUS_CHOICES3 = (
                (24, 'От 1 до 24'),
                (49, 'От 25 до 49'),
                (99, 'От 50 до 99'),
                (149, 'От 100 до 149'),
                (199, 'От 150 до 199'),
                (299, 'От 200 до 299'),
                (399, 'От 300 до 399'),
                (499, 'От 400 до 499'),
                (999, 'От 500 до 999'),
                (1000, 'От 1000 '),
                ('', 'Любая'),
        )
        square_for_filter = django_filters.MultipleChoiceFilter(choices=STATUS_CHOICES3, label='Требуемая площадь (в кв.м.)', method='square_filter')
        
            def square_filter(self, queryset, name, value):
        if value == '24':
            return queryset.filter(Q(square__icontains='Любой') | Q(square_for_filter__lte=value))
        if value == '49':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=25) & Q(square_for_filter__lte=value))
        if value == '99':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=50) & Q(square_for_filter__lte=value))
        if value == '149':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=100) & Q(square_for_filter__lte=value))
        if value == '199':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=150) & Q(square_for_filter__lte=value))
        if value == '299':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=200) & Q(square_for_filter__lte=value))
        if value == '399':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=300) & Q(square_for_filter__lte=value))
        if value == '499':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=400) & Q(square_for_filter__lte=value))
        if value == '999':
            return queryset.filter(
                Q(square__icontains='Любой') | Q(square_for_filter__gte=500) & Q(square_for_filter__lte=value))
        if value == '1000':
            return queryset.filter(Q(square__icontains='Любой') | Q(square_for_filter__gte=1000))


У модели есть два атрибута площади, один- текстовое, для заполнения таблицы в шаблоне, и второй- поле числовое, по которому происходит фильтрация. Square и SquareForFilter соответственно. "Любой" в условии нужно для того, чтобы при выборе площади от 1 до 25 метров, выдавались еще и записи для которых в таблице указаны ещё и значения "любой" . Для просто ChoiceFilter всё работало.
Выдаётся такая ошибка:
61557a36c2d10644985771.png
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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