Django: Q Конкатенация объектов - PullRequest
       23

Django: Q Конкатенация объектов

0 голосов
/ 30 сентября 2019

Пытался отфильтровать объекты 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)

Но это не позволяет мне искать «Джона Смита» по-прежнему только «Джона» или «Смита».

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете попробовать что-то вроде этого, где вы аннотируете полное_имя в наборе запросов, объединяя имя и фамилию, и фильтруете по ним.

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
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...