Как искать строку с пробелом в методе поиска 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))