簡體   English   中英

檢查queryset是否已經存在

[英]Check if queryset already exists

我有一個查詢集列表,例如([qSet1, qSet2, qSet3],[qSet3, qSet2],[qSet1, qSet3])

然后,我想添加另一個查詢集,但前提是它在列表中尚不存在。 集合可以具有相同的內容,但順序不同: [qSet1, qSet2], [qSet2, qSet1] 該查詢集必須視為相同=>不得添加兩次。

我怎樣才能做到這一點?

如果要比較的是列表的內容,並且不希望順序有所不同,則應使用set

set([qSet1, qSet2]) == set([qSet2, qSet1])

這是假設同一查詢集不在同一列表中兩次。

要檢查一組QuerySet的相同性( 雙關的意思 ),您可以利用Django為QuerySet提供的.query方法獲得的基礎SQL查詢。 此方法返回字符串文字。

假設您有一個QuerySet元組列表:

list_of_querysets = [(qSet1, qSet2, qSet3), (qSet3, qSet2), (qSet1, qSet3)]

要檢查新的任意元組qsets_arb = (qSet_arb1, qSet_arb2)在列表中是否已匹配,您可以執行以下操作:

def get_sql(tuple_of_querysets):
    '''Return a set of SQL statements from a tuple of QuerySets'''
    return set([str(queryset.query) for queryset in tuple_of_querysets])

# ordering of items in sets do not matter: set([q1, q2]) = set([q2, q1])
if get_sql(qsets_arb) in map(get_sql, list_of_querysets[:]):
     print("This tuple of QuerySets has already been included")
else:
     list_of_querysets.append(qsets_arb)

那幾乎應該做您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM