程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Django中查询全名大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在Django中查询全名?

开发过程中遇到在Django中查询全名的问题如何解决?下面主要结合日常开发的经验,给出你关于在Django中查询全名的解决方法建议,希望对你解决在Django中查询全名有所启发或帮助;

除非我缺少任何东西,否则可以使用python来查询数据库,如下所示:

from django.contrib.auth.models import User
x = User.objects.filter(first_name='John', last_name='Smith') 

编辑: 要回答您的问题:

如果在用户搜索“ John Smith”时需要返回“ John Paul Smith”,则可以使用“ contains ”,它转换为sql liKE。如果仅需要存储名称“ John Paul”的功能,则将两个名称都放在first_name列中。

User.objects.filter(first_name__contains='John', last_name__contains='Smith') 

转换为:

SELECT * FROM USERS
WHERE first_name liKE'%John%' 
AND last_name liKE'%smith%'

这个问题是很久以前发布的,但是我遇到了类似的问题,在这里很难找到答案。接受的答案仅允许您按first_name和last_name查找完全匹配。第二个答案要好一些,但仍然很糟糕,因为您尽可能多地访问数据库。这是我的解决方案,将first_name和last_name注释在一起并在此字段中搜索:

from django.db.models import Value as V
from django.db.models.functions import Concat   

users = User.objects.Annotate(full_name=Concat('first_name', V(' '), 'last_name')).\
                filter(full_name__icontains=query)

例如,如果此人的名字是John Smith,则可以通过键入john smith,john,smith,hn smi等找到他。它仅命中数据库。我认为这将是您在公开帖子中想要的确切sql。

解决方法

如何在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用户模型。直接更改模型不是问题。

大佬总结

以上是大佬教程为你收集整理的在Django中查询全名全部内容,希望文章能够帮你解决在Django中查询全名所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。