我有一个名为“User”的django模型,它存储一些关于人的基本信息,即名和姓。我目前在我的django模型中进行了简单的搜索,其中,如果用户键入名称的第一个名称,则django queryset返回前10个匹配项,由最后名称排序。在Django Queryset顶部返回完全匹配
例如,目前,如果你搜索 “萨姆”,你可能会得到如下结果:
- 山姆雅培
- 塞缪尔·贝克
- 萨米·罗杰斯
- 萨姆·西蒙斯
这个代码很简单:
User.objects.filter(Q(first__istartswith=token)).order_by('last')
但是,我想对此进行更改,以便任何确切名称匹配首先返回,其次是其余结果。因此,如果在“山姆”有人类型,其结果应改为:
- 山姆雅培
- 萨姆·西蒙斯
- 塞缪尔·贝克
- 萨米·罗杰斯
(精确第一的名头相匹配,按姓氏排序,然后是按姓氏排序的其余比赛)。
我想过把它变成2个查询集,然后只是组合列表,但我想知道是否有可能在1个查询中做到这一点,理想情况下坚持使用基本的django queryset API(而不是写一次性的查询)。有谁知道一种方法来做到这一点?
在此先感谢。
也是你使用'django.contrib.auth.models.User'?如果是这样'first_name'和'last_name'是默认的字段名称。 – 2012-07-10 18:05:45
不,这是一个不同的自定义模型。 – Chad 2012-07-10 19:25:57
只是双重检查=) – 2012-07-10 19:28:37