django过滤器使用两列两列

时间:2012-10-15 10:59:55

标签: django

我有一个场景,我必须在列表中匹配名字和姓氏,但我找不到解决方案。对于一个记录,它工作正常但是对于列表它不起作用。

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) 

2 个答案:

答案 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中的条目