代码之家  ›  专栏  ›  技术社区  ›  Avi Rob Spoor

查询中的Django绝对值

  •  0
  • Avi Rob Spoor  · 技术社区  · 7 年前

    我有一个在DB表中表示用户的uuid列表。我要获取符合此条件的所有用户,因此使用 __in 过滤器:

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

    如果不是所有的uuid都出现在表中,我想引发一个异常。换句话说,我希望为每个uuid返回一个结果,这样 len(users) == len(uuids) . 有什么简单的Django方法吗?如果不是,有没有一个简单的方法让我创造这种行为?

    2 回复  |  直到 7 年前
        1
  •  0
  •   ThunderHorn    7 年前

    如果愿意,可以使用exclude将不匹配查询的对象提供给您

    #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
    
        2
  •  0
  •   CoffeeBasedLifeform    7 年前

    别想得太复杂。您想知道某个列表是否完全包含在另一个列表中,这只是简单的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