曾经尝试使用Q对象进行过滤,并且能够搜索“名字” +“姓氏”,但是只能搜索一个或另一个。谁能告诉我我在做什么错?
评估搜索视图
为澄清起见:
ma =员工编号
fornavn =名字
efternavn =姓氏
fagnavn =主题名称
aktivitetnavn =亲和力名称
vuderingsnavn =等级
delingnavn =部门(整数)
class SearchEvalueringer(ListView):
model = Evaluering
template_name = 'evalsys/categories/søg_evalueringer.html'
def get_queryset(self):
query = self.request.GET.get('q')
if len(query) > 1:
eval_list = Evaluering.objects.filter(
Q(ma__ma__regex=query) |
Q(ma__fornavn__iregex=query) |
Q(ma__efternavn__iregex=query) |
Q(fagnavn__fagnavn__iregex=query) |
Q(aktivitetnavn__aktivitetnavn__iregex=query) |
Q(vuderingsnavn__vuderingsnavn__iregex=query) |
Q(ma__holdnavn__holdnavn__iregex=query)
)
else:
eval_list = Evaluering.objects.filter(
Q(ma__delingnavn__delingnavn__exact=query)
)
return eval_list
我尝试这样做:
Q(ma__fornavn__iregex=query) & Q(ma__efternavn__iregex=query)
但是这不能让我搜索“ John Smith”,仍然只能搜索“ John”或“ Smith”。
[您可以尝试类似的方法,在该方法中,您将姓氏和姓氏进行隐含,然后在查询集上注释全名,然后对其进行过滤。
from django.db.models import CharField, Value
from django.db.models.functions import Concat
queryset.objects.annotate(
full_name=Concat(
"first_name", Value(" "), "last_name",
output_filed=CharField()
).filter(
full_name=query
)