Django-фильтр 'icontains' не переходит на мой URL - PullRequest
1 голос
/ 26 сентября 2019

Я использую сторонний Django-фильтр, чтобы создать панель поиска для моих сообщений в блоге.

import django_filters
from .models import Post
from django.db import models


class PostFilter(django_filters.FilterSet):
    title = django_filters.CharFilter(field_name='title')

    class Meta:
        model = Post
        fields = {
            'title': ['icontains'],
            }
    #I've tried using filter_overrides to no success
        filter_overrides = {
            models.CharField: {
                'filter_class': django_filters.CharFilter,
                'extra': lambda f: {
                    'lookup_expr': 'icontains',
                    },
                }
            }

Я прочитал, что CharFilter и TextFilter по умолчанию точны, однако я думал, что я изменял это ниже.Я пробовал содержит и иконки.Поиск передается по URL, например: "... blog /? Title = foo".Я вручную набрал URL-адрес «... / blog /? Title__icontains = foo», и это работает, однако рабочий URL-адрес не является URL-адресом, который передается после того, как я нажимаю кнопку поиска.Буду признателен за любую помощь, спасибо.

* edit: чтобы было ясно, фильтр работает, но работает так, как будто он «точный», а не «содержит».он найдет результаты, но только если я буду искать полное название

1 Ответ

0 голосов
/ 26 сентября 2019

Гарри,

Вы пробовали переопределение, определенное django-filter?

class ProductFilter(django_filters.FilterSet):

class Meta:
    model = Product
    fields = {
        'name': ['exact'],
        'release_date': ['isnull'],
    }
    filter_overrides = {
        models.CharField: {
            'filter_class': django_filters.CharFilter,
            'extra': lambda f: {
                'lookup_expr': 'icontains',
            },
        },
        models.BooleanField: {
            'filter_class': django_filters.BooleanFilter,
            'extra': lambda f: {
                'widget': forms.CheckboxInput,
            },
        },
    }
...