当我一起搜索first_name和last_name字段时,它不会显示结果
serch_text =“哈利波特”它不包括空间吗?
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})发布于 2022-03-12 12:40:40
我们可以使用注释方法
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))发布于 2022-03-06 09:43:59
如果您使用的是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)
)编辑如果名字和姓氏都应该匹配搜索文本,您必须使用两个过滤器语句,如下文所述:
wallets = Wallet.objects.filter(
Q(user__customer__first_name__in=search_text)
).filter(
Q(user__customer__last_name__in=search_text) |
)https://stackoverflow.com/questions/71369007
复制相似问题