Django-filter'icontains'不会传递到我的URL

问题描述 投票:1回答:1

我正在使用第三方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。任何帮助,将不胜感激,谢谢。

*编辑:要清楚,过滤器正在工作,但它好像在“完全”而不是“包含”。它会找到结果,但是只有当我搜索完整的标题时

django django-filter
1个回答
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,
            },
        },
    }
© www.soinside.com 2019 - 2024. All rights reserved.