首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django搜索方法中搜索带空格的字符串?

如何在django搜索方法中搜索带空格的字符串?
EN

Stack Overflow用户
提问于 2022-03-06 09:20:10
回答 2查看 567关注 0票数 0

当我一起搜索first_namelast_name字段时,它不会显示结果

serch_text =“哈利波特”它不包括空间吗?

views.py

代码语言:javascript
复制
def get(self, request, *args, **kwargs):
    if request.is_ajax():
        search_text = request.GET.get('search')
        if search_text is not None and search_text != u"":
            search_text = request.GET.get('search')
            print(search_text)
            wallets = Wallet.objects.filter(Q(user__customer__first_name__icontains=search_text) |
                                            Q(user__customer__last_name__icontains=search_text) |
                                            Q(user__customer__email__icontains=search_text) |
                                            Q(user__customer__phone__icontains=search_text))
        else:
            wallets = Wallet.objects.all()
        html = render_to_string('customer/wallet-filter.html', {'wallets': wallets},
                                request)
        return JsonResponse({'html': html})

    wallets = Wallet.objects.all().order_by('-id')
    

    return render(request, 'customer/wallets.html', {'wallets': wallets})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-12 12:40:40

我们可以使用注释方法

代码语言:javascript
复制
wallets = Wallet.objects.annotate(
                fullname=Concat('user__customer__first_name', Value(' '), 'user__customer__last_name')).filter(
                Q(user__customer__first_name__icontains=search_text) |
                Q(user__customer__last_name__icontains=search_text) |
                Q(user__customer__email__icontains=search_text) |
                Q(user__customer__phone__icontains=search_text) | Q(fullname__icontains=search_text))
票数 0
EN

Stack Overflow用户

发布于 2022-03-06 09:43:59

如果您使用的是icontains,过滤器将检查您的任何模型字段是否完全包括字符串“哈利波特”。

如果search_text可以包含由空格分隔的多个字符串,则可以将这些名称拆分为一个列表。然后,您的过滤器可以检查,如果您的模型字段匹配这些搜索字符串之一。

代码语言:javascript
复制
search_text  = search_text.split(' ')  # Split search_text into list of multiple strings

wallets = Wallet.objects.filter(
    Q(user__customer__first_name__in=search_text) |  
    Q(user__customer__last_name__in=search_text) | 
    Q(user__customer__email__in=search_text) |        
    Q(user__customer__phone__in=search_text)
)

编辑如果名字和姓氏都应该匹配搜索文本,您必须使用两个过滤器语句,如下文所述:

代码语言:javascript
复制
wallets = Wallet.objects.filter(
    Q(user__customer__first_name__in=search_text)
).filter(    
    Q(user__customer__last_name__in=search_text) | 
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71369007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档