django管理员搜索多个单词

Gui*_*mas 8 python django django-admin

我使用的烦恼search_fields,当搜索表达式中有多个单词,我想执行startswith搜索

我上课了

class Foo(models.Model):
  kw = models.CharField(max_length = 255)
  ...

class FooAdmin(admin.ModelAdmin):
  search_fields = ('^kw',)
Run Code Online (Sandbox Code Playgroud)

'^'表明我要执行startswith搜索.如果我正在寻找kw'foo fuu',django将执行查询:

select * from app_foo where `foo`.`kw` like 'foo%' and `foo`.`kw` like 'fuu%' 
Run Code Online (Sandbox Code Playgroud)

此查询显然没有结果.我该怎么做才能让引擎找到'foo fuu%'

Mik*_*gel 12

如何重写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
Run Code Online (Sandbox Code Playgroud)