Skip to main content
 首页 » 编程设计

python之Django之获取外键(相关)对象列表

2024年08月16日30wuhuacong

有一个模型:

class Combination(models.Model): 
    changed_by = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='combinations') 

我如何获得创建此类组合的所有用户的列表/查询集?

请您参考如下方法:

user_instance.combinations.all() 应该会为您提供相关用户的组合。


但是,如果您想选择所有已创建至少一个 Combination 实例的用户,那么您有一些选择:

  1. 只需使用 User.objects.filter(combination__isnull=False) 就像用户@PauloAlmeida 在这个答案的评论中指出的那样(我不知道这种方式,即使它就在那里在 docs 中,所以我今天也学到了一些新东西)。

  2. 您可以使用效率较低但更简单的 python 代码来遍历用户:

    user_list = [] 
    for u in User.objects.all(): 
        if u.combinations.exists(): 
            # add users that have at least one combination 
            user_list.append(u) 
    
  3. 您可以使用效率较低但更简单的 python 代码来迭代组合:

    user_set = set() 
    for c in Combination.objects.filter(changed_by__isnull=False): 
        # will have no effect if user is already present in user_set 
        user_set.add(c.changed_by)