gpt4 book ai didi

python - 以我自己的观点使用 Django Admin 搜索引擎

转载 作者:行者123 更新时间:2023-12-01 05:27:01 31 4
gpt4 key购买 nike

我正在尝试使用与 Django 在管理页面中使用的相同的搜索引擎来在我的自定义 View 中显示结果。

我找到了this website建议使用以下代码:

from django.db.models import Q
from django.db.models.query import QuerySet
import operator

def django_admin_keyword_search(model, keywords, base_qs=None):
"""Search according to fields defined in Admin's search_fields"""
if not keywords:
return []
fields = model._meta.admin.search_fields

qs = QuerySet(model)

for keyword in keywords:
or_queries = [Q(**{'%s__icontains' % field: keyword}) for field in fields]
if base_qs is None:
other_qs = QuerySet(model)
else:
other_qs = base_qs
if qs._select_related:
other_qs = other_qs.select_related()
other_qs = other_qs.filter(reduce(operator.or_, or_queries))
qs = qs & other_qs

return qs

def do_keyword_search(model, query, base_qs=None):
return django_admin_keyword_search(model, query.split(' '),
base_qs=base_qs)

但我无法在没有出现属性错误(“Options”对象没有属性“admin”)的情况下运行该代码:fields = model._meta .admin.search_fields

编辑:我在使用管理员默认搜索引擎时做错了什么?

还有其他使用默认管理搜索引擎的方法吗?

最佳答案

我设法构建了自己的通用搜索,其工作方式类似于管理搜索。类如下:

from django.db.models import Q
from django.db.models.query import QuerySet
import operator

def django_admin_keyword_search(model, keywords, search_fields):
"""Search according to fields defined in Admin's search_fields"""
all_queries = None

for keyword in keywords.split(' '): #breaks query_string into 'Foo' and 'Bar'
keyword_query = None

for field in search_fields:
each_query = Q(**{field+'__icontains':keyword})

if not keyword_query:
keyword_query = each_query
else:
keyword_query = keyword_query | each_query

if not all_queries:
all_queries = keyword_query
else:
all_queries = all_queries & keyword_query

result_set = model.objects.filter(all_queries).distinct()

return result_set

享受吧!!

关于python - 以我自己的观点使用 Django Admin 搜索引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21137821/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com