首页 > 解决方案 > 添加查找表达式后未显示 Django-filter 字段 - django-filter lib

问题描述

我正在尝试为我的网站实现搜索字段,我决定使用django-filter

我能够创建一个搜索字段并通过在搜索字段中输入确切的记录名称来搜索记录。(默认它提供exact字段查找)它工作得很好。 前

然后我决定添加更多的字段查找以改善搜索体验。但在添加一些字段查找后,搜索表单字段停止出现在模板中。 在此处输入图像描述

我浏览了几次文档,还尝试用谷歌搜索该问题,但无法解决。

测试:顺便说一下,将字段查找(icontains)硬连接到查询集是有效的。而且查询集也可以正常工作。

所以这是我处理搜索字段的上下文处理器(搜索字段在base.html

context_processor.py

from django.db.models import Prefetch
from django.shortcuts import render
from store.filters import ProductFilter
from store.models import Product, ProductImage, Wishlist


def include_search_bar(request):
    queryset = Product.objects.order_by('name').prefetch_related(
        Prefetch(
            'productimage_set',
            ProductImage.objects.filter(place='Main Product Image'),
            to_attr='main_image'
        ),
    )
    product_filter = ProductFilter(request.GET, queryset=queryset)
    products = product_filter.qs

    context = {
        'product_filter': product_filter,
        'products': products,
    }

    return context
    

过滤器.py

从 .models 导入 django_filters 导入产品

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = {  
            'name':['icontains']
        }
        # fields = ['name'] worked fine

base.html

<form class="form-inline d-flex active-pink md-form form-sm mr-3" method="get" id="search">
    <div class="input-group">
        {% render_field product_filter.form.name class="form-control form-control-sm" %}
        <div class="input-group-prepend">
            <button type="submit" class="input-group-text btn fa fa-search" id="inputGroupPrepend2"></button>
        </div>
    </div>
</form>

标签: djangodjango-formsdjango-filter

解决方案


使用'name': ['icontains'],您使用 过滤name__icontains,因此搜索字段的名称(在 HTML 表单中)应为name__icontains

{% render_field product_filter.form.name__icontains class="form-control form-control-sm" %}

推荐阅读