所以这是我的问题:
假设我有一些人的全名列表,我想过滤我的用户,以检查这些人中哪一个已经是我的用户。
问题是用户有名字和姓氏,但我所拥有的是全名列表,意思是'first_name + last_name'。
我试图过滤3个步骤,首先过滤所有用户的first_names在列表中的位置,然后用他们的last_name过滤。第三步是检查结果之间的确切匹配,但问题是我可以' t使用列表中的first_name过滤我的用户,因为__in
运算符会查找完全匹配而不是部分匹配
的所以:
无论如何都要做这样的过滤器:
users.filter(first_name__in__icontains=list_of_people)
甚至更好,我可以使用像:
这样的过滤器users.filter((first_name+ ' ' + last_name)__in=list_of_people)
?
任何帮助将不胜感激:)
感谢
答案 0 :(得分:2)
对我来说似乎不可能使用普通的查询集,我猜你需要遍历列表并找到匹配项,例如:
from django.db.models import Q
qs = User.objects.all()
for fullname in list_of_names:
firstname, lastname = fullname.split()
qs = qs.filter(
Q(first_name__icontains = firstname),
Q(last_name__icontains = lastname)
)
另一种选择是使用raw query,对于这种情况可以没问题,查询将是这样的:
SELECT * FROM users WHERE CONCAT(firstname, ' ', lastname) IN (list_of_name)
但这不是不区分大小写的,你应该尽量避免原始查询。