Как искать строку с пробелом в методе поиска django?

когда я ищу в поле first_name и last_name вместе, он не отображает результат

eg: serch_text = "harry potter" он не включает пробел?

views.py

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})

Если вы используете icontains, фильтр будет проверять, включает ли любое из полей вашей модели строку "Гарри Поттер".

Если search_text может содержать несколько строк, разделенных пробелами, вы можете разделить эти имена на список. Тогда ваши фильтры смогут проверять, соответствуют ли поля вашей модели одной из этих поисковых строк.

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)
)

Мы можем использовать метод annotate

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))
Вернуться на верх