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