django - 添加查找表达式后未显示 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>
解决方案
使用'name': ['icontains']
,您使用 过滤name__icontains
,因此搜索字段的名称(在 HTML 表单中)应为name__icontains
:
{% render_field product_filter.form.name__icontains class="form-control form-control-sm" %}
推荐阅读
- ibm-mq - IBM MQ v9.1 中的通道排序错误
- regex - 正则表达式 - 带循环的数学
- log4j - 如何在 log4j2 中级联附加程序
- mysql - 无法在 MariaDB 中导入大型 CSV 文件
- python - 在 python 字典中,如何显示字典条目的键和值的内容?
- android - 生成 DialogFragment,同时保持对外部视图的关注
- metal - 具有 sRGB 和非 sRGA 纹理的 MTKView
- python - 如何忽略 ROS 同步器中的禁用节点?
- javascript - 高度自动变化时制作动画
- c++ - 带有 __VA_ARGS__ 的嵌套宏不展开