[英]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.