因此,我找到了一种在Django过滤器中同时使用_unaccent
和_search
的方法,但我正试图找到一种方法,将其正确地实现到管理页面的搜索栏中。到目前为止,我有以下代码,但是由于我没有正确地完成它,诸如search_fields = []
之类的管理设置没有正确应用。如果有人能帮我将我的解决方案与最初的Django实现合并,我将不胜感激。在
admin.ModelAdmin
函数被重写:
def get_search_results(self, request, queryset, search_term):
"""
Returns a tuple containing a queryset to implement the search,
and a boolean indicating if the results may contain duplicates.
"""
# Apply keyword searches.
def construct_search(field_name):
if field_name.startswith('^'):
return "%s__istartswith" % field_name[1:]
elif field_name.startswith('='):
return "%s__iexact" % field_name[1:]
elif field_name.startswith('@'):
return "%s__search" % field_name[1:]
else:
return "%s__icontains" % field_name
use_distinct = False
search_fields = self.get_search_fields(request)
if search_fields and search_term:
orm_lookups = [construct_search(str(search_field))
for search_field in search_fields]
for bit in search_term.split():
or_queries = [models.Q(**{orm_lookup: bit})
for orm_lookup in orm_lookups]
queryset = queryset.filter(reduce(operator.or_, or_queries))
if not use_distinct:
for search_spec in orm_lookups:
if lookup_needs_distinct(self.opts, search_spec):
use_distinct = True
break
return queryset, use_distinct
我的代码:
^{pr2}$Django: 1.11.5
Python: 3.6.2
我从你的问题中了解到的是,你希望搜索字段和非事件搜索一起工作。在
我不知道我是否理解你的疑问。在
以下是我理解的解决方案:
如果你还需要别的东西,请告诉我。在
相关问题 更多 >
编程相关推荐