Django过滤器“ icontains”未传递到我的网址

时间:2019-09-26 11:10:28

标签: python django django-filter

我正在使用第三方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默认为精确,但是我认为我在下面进行更改。我试过包含和icontains。 搜索正在传递到URL,例如:“ ... blog /?title = foo”。我已经手动键入了“ ... / blog /?title__icontains = foo” URL,并且可以正常工作,但是单击我的搜索按钮后,正在传递的URL不是工作URL。 任何帮助将不胜感激,谢谢。

* edit:显然,该过滤器正在工作,但它好像在“完全”而不是“包含”。它会找到结果,但前提是我要搜索完整的标题

1 个答案:

答案 0 :(得分:0)

哈里

您是否尝试过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,
            },
        },
    }