【发布时间】:2012-07-09 13:13:48
【问题描述】:
我有一个名为“用户”的 django 模型,它存储了一些关于人的基本信息,即名字和姓氏。我目前在我的 django 模型中进行了简单搜索,如果用户输入 first 名称,django 查询集将返回前 10 个匹配项,按 last 名称排序。
例如,目前,如果您搜索“Sam”,您可能会得到以下结果:
- 山姆·雅培
- 塞缪尔·贝克
- 萨米·罗杰斯
- 山姆·西蒙斯
代码很简单:
User.objects.filter(Q(first__istartswith=token)).order_by('last')
但是,我想更改此设置,以便首先返回任何 精确 名字匹配,然后是其余结果。因此,如果有人输入“Sam”,结果应该是:
- 山姆·雅培
- 山姆·西蒙斯
- 塞缪尔·贝克
- 萨米·罗杰斯
(确切的名字首先匹配,按姓氏排序,然后是其余匹配,按姓氏排序)。
我想把它变成 2 个查询集,然后只是组合列表,但我想知道是否可以在 1 个查询中做到这一点,最好坚持使用基本的 django 查询集 API(而不是编写一次性查询)。有谁知道这样做的方法吗?
提前致谢。
【问题讨论】:
-
你也在使用
django.contrib.auth.models.User吗?如果是这样,first_name和last_name是默认字段名称。 -
不,这是一个不同的自定义模型。
标签: python django django-queryset