1

名と姓をリストと照合する必要があるシナリオがありますが、解決策が見つかりません。1 つのレコードでは正常に機能しますが、リストでは機能しません。

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

しかし、リストの場合:

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

ジョン・ピーターはデータベースで利用できません. しかし、最初の match__ により、3 番目のレコードがもたらされます。また、db には多くのレコードがありますが、john doe と mark waugh を返す必要があります。ジョン・ピーターをスキップする必要があります。

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

2 に答える 2

1

考えられる解決策の 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 は正確なクエリではないため、動作は正しいです。

次の 2 つの選択肢があります。

1)最初の例で行ったように、各タプル(名、姓)の正確なクエリに切り替えます

2) list1 と list2 の両方にないエントリを表示しないように、2 番目のクエリで除外フィルタをチェーンします。

于 2012-10-15T12:45:07.703 に答える