0

所以这是我的问题:
假设我有一些人的全名列表,我想过滤我的用户以检查其中哪些人已经是我的用户。

问题是用户有名字和姓氏,但我拥有的是全名列表,意思是“名字+姓氏”。

我试图通过 3 个步骤进行过滤,首先过滤列表中 first_names 的所有用户,然后使用他们的 last_name 过滤。第三步是检查结果之间的完全匹配,但问题是我无法过滤我的列表中包含 first_name 的用户,因为__in运算符会查找完全匹配而不是部分匹配。
所以
无论如何要做这样的过滤器:

users.filter(first_name__in__icontains=list_of_people)   

甚至更好,我可以有一个像这样的过滤器:

users.filter((first_name+ ' ' + last_name)__in=list_of_people)

?
任何帮助将不胜感激:)
谢谢

4

1 回答 1

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)
    )

另一种选择是使用原始查询,在这种情况下可以使用,查询类似于:

SELECT * FROM users WHERE CONCAT(firstname, ' ', lastname) IN (list_of_name)

但这不区分大小写,无论如何您都应该尽量避免原始查询。

于 2013-08-17T10:52:00.320 回答