我有一个场景,我必须在列表中匹配名字和姓氏,但我找不到解决方案。对于一个记录,它工作正常但是对于列表它不起作用。
user.objects.filter(firstname ='john',lastname='doe') it is working fine.
但如果是列表:
list1 = ['john','mark','john']
list2 = ['doe','waugh','peter']
john peter在db中不可用。但由于第一场比赛进入,它带来了第三项纪录。 此外,在db中它有很多记录但它应该返回john doe并标记waugh。它应该跳过约翰彼得。
user.objects.filter(firstname__in =list1,lastname__in=list2)
答案 0 :(得分:1)
一种可能的解决方案是使用Q对象:
query = Q()
for firstname, lastname in zip(list1, list2):
query |= Q(firstname=firstname, lastname=lastname)
user.objects.filter(query)
答案 1 :(得分:0)
行为是正确的,因为__in不是一个确切的查询。
你有两个选择:
1)切换到每个元组(firstname,surname)的精确查询,就像你在第一个例子中所做的那样
2)在第二个查询上链接exclude filter,以避免显示不在list1和list2中的条目