Вернуть точные совпадения в верхней части Django Queryset

У меня есть модель django под названием «Пользователь», в которой хранится основная информация о людях, а именно имя и фамилия. В настоящее время у меня есть простой поиск по моей модели django, где, если пользователь вводит первое имя, набор запросов django возвращает первые 10 совпадений, упорядоченных по последнему имени.

Например, в настоящее время, если вы ищете «Сэм», вы можете получить следующие результаты:

  1. Сэм Эбботт
  2. Сэмюэл Бейкер
  3. Сэмми Роджерс
  4. Сэм Симмонс

Код для этого прост:

User.objects.filter(Q(first__istartswith=token)).order_by('last')

Однако я хочу изменить это так, чтобы любое точное совпадение имени возвращалось первым, а затем остальные результаты. Поэтому, если кто-то введет «Сэм», результаты должны быть такими::

  1. Сэм Эбботт
  2. Сэм Симмонс
  3. Сэмюэл Бейкер
  4. Сэмми Роджерс

(Сначала совпадает точное имя, отсортированное по фамилии, а затем остальные совпадения, отсортированные по фамилии ).

Я думал превратить это в 2 набора запросов, а затем просто объединить списки, но мне было интересно, можно ли сделать это в 1 запросе, в идеале придерживаясь базового API набора запросов django (, а не списывая один -. запрос ). Кто-нибудь знает способ сделать это?

Заранее спасибо.

8
задан Chad 10 July 2012 в 05:03
поделиться