Django:Q对象串联

问题描述 投票:0回答:1

曾经尝试使用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”。

django django-views django-filter
1个回答
0
投票

[您可以尝试类似的方法,在该方法中,您将姓氏和姓氏进行隐含,然后在查询集上注释全名,然后对其进行过滤。

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
    )
© www.soinside.com 2019 - 2024. All rights reserved.