有一个模型:
class Combination(models.Model):
changed_by = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='combinations')
我如何获得创建此类组合的所有用户的列表/查询集?
请您参考如下方法:
user_instance.combinations.all() 应该会为您提供相关用户的组合。
但是,如果您想选择所有已创建至少一个 Combination 实例的用户,那么您有一些选择:
只需使用
User.objects.filter(combination__isnull=False)就像用户@PauloAlmeida 在这个答案的评论中指出的那样(我不知道这种方式,即使它就在那里在 docs 中,所以我今天也学到了一些新东西)。您可以使用效率较低但更简单的 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)您可以使用效率较低但更简单的 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)
