[英]How can I get the *UN*matched criteria for a Django .filter(something__in=some_set) query?
我经常会找到一组标识符,并希望检索表中与所有标识符匹配的所有对象,但也希望查看数据库中没有任何匹配对象的所有标识符。
我现在这样做的方式是:
some_ids = ("a", "b", "c")
matched_objects = MyModel.objects.filter(my_key__in=some_ids)
caught_ids = set()
for obj in matched_objects:
caught_ids.add(obj.my_key)
unmatched_ids = set(some_ids) - caught_ids
这感觉很冗长。 有一个更好的方法吗?
对于问题的第二部分,获取my_key
字段的my_key
值
caught_ids = matched_objects.values_list('my_key').distinct()
然后像以前一样获取unmatched_ids
。
unmatched_ids = set(some_ids) - set(caught_ids)
您的代码如下所示:
some_ids = ("a", "b", "c")
matched_objects = MyModel.objects.filter(my_key__in=some_ids)
caught_ids = matched_objects.values_list('my_key').distinct()
unmatched_ids = set(some_ids) - set(caught_ids)
# Get a list of keys that match your IDs
some_ids = set(some_ids)
keys = set(MyModel.objects.filter(my_key__in = some_ids).values_list('my_key',flat=True))
大概keys
将包含some_ids
中存在的所有那些ID。 现在,我们可以使用典型的设置操作来识别匹配或不匹配的元素。 这里有许多示例( http://docs.python.org/2/library/sets.html#set-objects ),但从您的评论看来,这听起来像是您想要的:
unmatched = some_ids not in keys
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.