1

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

user.objects.filter(firstname ='john',lastname='doe') it is working fine.

但如果是列表:

list1 = ['john','mark','john']
list2 = ['doe','waugh','peter']

约翰彼得在 db 中不可用。但由于第一个 match__ in,它带来了第三个记录。此外,在 db 中它有很多记录,但它应该返回 john doe 和 mark waugh。它应该跳过约翰彼得。

user.objects.filter(firstname__in =list1,lastname__in=list2) 
4

2 回答 2

1

一种可能的解决方案是使用Q对象:

query = Q()
for firstname, lastname in zip(list1, list2):
    query |= Q(firstname=firstname, lastname=lastname)
user.objects.filter(query)
于 2016-10-13T13:54:12.427 回答
0

行为是正确的,因为 __in 不是一个精确的查询。

你有两个选择:

1)切换到每个元组(名字,姓氏)的精确查询,就像在第一个示例中所做的那样

2) 在第二个查询上链接一个排除过滤器,以避免显示不在 list1 和 list2 中的条目

于 2012-10-15T12:45:07.703 回答