繁体   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