当搜索表达式有多个单词并且我想执行 startswith 搜索时,我在使用 search_fields
时遇到问题
我有课
class Foo(models.Model):
kw = models.CharField(max_length = 255)
...
class FooAdmin(admin.ModelAdmin):
search_fields = ('^kw',)
'^'
表示我想执行 startswith 搜索。如果我正在寻找 kw 'foo fuu',django 将执行查询:
select * from app_foo where `foo`.`kw` like 'foo%' and `foo`.`kw` like 'fuu%'
这个查询显然给出了零结果。我应该怎么做才能让引擎寻找 'foo fuu%'
?
最佳答案
如何重写 self.query
让 split()
不起作用?
from django.contrib.admin.views.main import ChangeList
class UnsplitableUnicode(str):
"An object that behaves like a unicode string but cannot be split()"
def split(self, *args, **kwargs):
return [self]
class MultiWordSearchChangeList(ChangeList):
"Changelist that allows searches to contain spaces"
def get_query_set(self, request):
self.query = UnsplitableUnicode(self.query)
return super(MultiWordSearchChangeList, self).get_query_set(request)
class FooAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return MultiWordSearchChangeList
关于python - django admin 搜索多个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14426692/