【发布时间】:2011-12-02 15:51:59
【问题描述】:
如何在 Django 中查询全名?
为了澄清,我基本上想创建一个临时列,结合 first_name 和 last_name 给出一个全名,然后对其进行 LIKE,如下所示:
select [fields] from Users where CONCAT(first_name, ' ', last_name) LIKE '%John Smith%";
上述查询将返回所有名为 John Smith 的用户。如果可能的话,我想避免使用原始 SQL 调用。
我所说的模型是股票 django.contrib.auth.models 用户模型。直接对模型进行更改不是问题。
例如,如果用户要搜索“John Paul Smith”,它应该匹配名字为“John Paul”和姓氏“Smith”的用户,以及名字为“John”和姓“保罗·史密斯”。
【问题讨论】:
-
请包含您的 Django 模型。如果您想要一个“派生值”(如 SQL 中的
CONCAT(first_name, ' ', last_name)),您将不得不将其添加到模型中。因此,请在您的问题中包含模型。 -
你知道吗,顺便说一句,
CONCAT(first_name, ' ', last_name) LIKE '%John Smith%"效率非常低?使用first_name LIKE '%John' AND last_name LIKE 'Smith%'可以更高效吗?当有非 CONCAT 方法时,为什么要使用 CONCAT? -
这是标准的 django.contrib.auth.models 用户模型。我们已经在此模型中添加/更改字段,因此修改不是问题。
-
"在这个模型中添加/更改字段" 你为什么不使用配置文件扩展? docs.djangoproject.com/en/1.3/topics/auth/…
-
@S.Lott 我不知道效率问题,感谢您指出这一点。对于我们的应用程序,查询用户是一个单一的字段,所以我不能只在空格上分割。