Django - 获取外键(相关)对象的列表

时间:2018-04-17 14:30:34

标签: python django django-models

有一个模特:

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

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

1 个答案:

答案 0 :(得分:3)

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)