python - django admin 搜索多个词

标签 python django django-admin

当搜索表达式有多个单词并且我想执行 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.querysplit() 不起作用?

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/

相关文章:

django - DRF : Always apply default permission class

javascript - 在现有管理面板的 ListView 中实现 JavaScript 图形应用程序

python - Django 内联表单问题

python - 结合两个机器学习模型的结果

python - 是否可以通过 South 维护全局(跨所有应用程序)迁移历史记录?

python - 为什么我第二次运行类方法时会收到 TypeError?

python - ListView中的Django GET表单和上下文修改

python - 在 Python 中创建对象列表

python - Django CBV - 如何避免为每个 View 重复 get_context_data 以获得自定义标题?

django - 自定义list_filter结果