Django绝对__in查询

时间:2018-07-18 08:57:39

标签: django

我在数据库表中有一个代表用户的UUID列表。我想获取所有符合此条件的用户,所以我使用__in过滤器:

users = User.objects.filter(user__in=uuids)

如果不是所有的UUID都出现在表中,我想提出一个例外。换句话说,我希望每个uuid都返回一个结果,例如len(users) == len(uuids)。有一种简单的Django方法吗?如果没有,我是否有一种简单的方法来创建这种行为?

2 个答案:

答案 0 :(得分:0)

如果您愿意,可以使用排除为您提供与查询不匹配的对象

#this returns true if one or more and dont need to use len()
#if it looks better for you you can try it out
#if everything is fine will return None
if User.objects.filter().exclude(user__in=uiids).first(): 
   raise your_error

答案 1 :(得分:0)

不要觉得太复杂。您想知道某个事物的列表是否完全包含在另一个事物的列表中,那只是普通的python:

user_ids = User.objects.values_list('user_id',flat=True)
if not set(uuids).issubset(user_ids): # or use .difference() to get the uuids missing from user_ids
    raise stuff