Запрос на основе композиции столбцов в Django - PullRequest
1 голос
/ 09 сентября 2010

Я хотел бы выяснить, как выполнять запросы на основе композиции столбцов, например, полного имени пользователя, без какого-либо пользовательского SQL.Это возможно?

Представьте себе что-то вроде User.objects.filter (firstname__concat__lastname__startswith = "Barack Ob")

Я знаю, что в этом конкретном примере было бы достаточно легко разделить "BarackОбь "с помощью пробела и измените запрос, но возможно ли выполнить запрос по такой композиции столбцов?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Возможное решение вашего вопроса может быть решено, если ваша база данных поддерживает полнотекстовый поиск.Я использую Postgresql ( см. Документацию ) и смог заставить работать следующий запрос:

print User.objects.all().extra(where = 
     ["to_tsvector(coalesce(first_name) || coalesce(last_name)) 
      @@ to_tsquery('BarackObama')"])

Вы заметите, что я использовал полное имя в запросе.Мои знания о текстовом поиске ограничены, и я не знаю, есть ли способ сделать эквивалент __startswith (реализован с использованием LIKE).

Я подозреваю, что это будет излишним для вашегонеобходимо.Для реализации этого может быть лучше добавить пользовательское поле или пользовательский метод или их комбинацию.

1 голос
/ 09 сентября 2010

С текущим Django ORM, нет, он не существует.У вас есть доступ к обработчику запросов объекта Q.

User.objects.filter(Q(firstname__startswith=name.split(" ", 1)[0]), Q(lastname__startswith=name.split(" ", 1)[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...