Django xadmin search_fields 精确查询与报错解决
本文介绍如何在 Django xadmin 中解决 search_fields 因关联字段导致的 icontains 报错,并通过重写 get_search_results 实现基于整数 ID 的精确查询,同时保留默认模糊搜索功能。
此处省略冗余说明,直接展示核心代码实现。
search_fields = (u'gift_rule_id',u'user_id', u'activity_id',)
//默认的查询集合
def get_queryset(self, request):
return super(GiftConfirmAdmin, self).get_queryset(request).all().order_by("-id")
//根据关键字进行查询集合
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(GiftConfirmAdmin, self).get_search_results(request, queryset, search_term)
try:
search_term_as_int = int(search_term)
queryset &= (self.model.objects.filter(gift_rule_id=search_term_as_int) |
self.model.objects.filter(user_id=search_term_as_int) |
self.model.objects.filter(activity_id=search_term))
except:
pass
return queryset, use_distinct
补充知识:在使用 xadmin 搜索时,search_fields 配置不当会触发报错:Related Field got invalid lookup: icontains。
一、问题描述
在利用 xadmin 构建 Django 后台时,若直接在 search_fields 中指定多个字段,执行搜索操作时会抛出异常:Related Field got invalid lookup: icontains。
二、问题分析
search_fields 属性用于定义允许通过搜索框检索的字段列表。当该属性设置为空元组 () 或空列表 [] 时,xadmin 默认执行模糊查询逻辑。
该报错信息的含义是:相关字段的查找操作无效。原因在于 search_fields 中指定的字段并非字符类型,例如当字段类型为 ForeignKey 时,直接应用字符匹配逻辑会导致错误。
三、解决方法
从 search_fields 列表中移除类型不匹配的字段,例如删除字段类型为 ForeignKey 的项,即可避免该报错。
以上关于 Django admin 实现 search_fields 精确查询的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站内容。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













