首页 > 解决方案 > Django:忽略查询集中特定查询的空格

问题描述

输入:OFG 5T4 WR4 2-3 没有给出 ofg5t4wr42-3 的任何结果。

但是,这ticket_reference就是保存在我的数据库中的方式,而我将其显示在输入中看到的票证上,以使其更易于阅读。我可以ticket_reference__icontains用任何其他“过滤器”替换ticket_reference 查询的“忽略”空格吗?

def queryset(self, queryset):
    cleaned_data = self.cleaned_data

    # Search
    search = cleaned_data.get('search')
    if search:
        queryset = queryset.filter(
            Q(company_name__icontains=search) |
            Q(first_name__icontains=search) |
            Q(last_name__icontains=search) |
            Q(email__icontains=search) |
            Q(ticket_reference__icontains=search)
        )

标签: pythondjango

解决方案


您可以像这样删除空格:

def queryset(self, queryset):
    cleaned_data = self.cleaned_data

    # Search
    search = cleaned_data.get('search')
    if search:
        queryset = queryset.filter(
            Q(company_name__icontains=search) |
            Q(first_name__icontains=search) |
            Q(last_name__icontains=search) |
            Q(email__icontains=search) |
            Q(ticket_reference__icontains=search.replace(" ", "")
        )

请注意,这仍然是相当有限的,例如搜索“John Doe”将找不到first_name="John"、last_name="Doe" 的条目(因为 first_name 和 last_name 都不包含“John Doe”)。

如果您使用的是 PostgreSQL,我建议您查看有关全文搜索的 Django 文档。


推荐阅读