Django:如何获取创建Combination模型的用户列表/查询集
获取创建过Combination的用户查询集/列表
嗨,这个问题在Django里有两种实用的解决思路,看你需求选就行:
方法一:利用反向关联+去重
因为你的Combination模型里给changed_by设置了related_name='combinations',所以可以直接通过用户模型的反向关联来筛选,再用distinct()去重(毕竟一个用户可能创建多个Combination实例):
# 获取查询集 users_with_combinations = User.objects.filter(combinations__isnull=False).distinct() # 如果需要转成列表的话 user_list = list(users_with_combinations)
这个方法简单直接,适合数据量不大的场景。
方法二:用Exists子查询(更高效)
如果你的数据量比较大,推荐用Exists子查询的方式,它比上面的方法性能更好,而且不需要额外去重:
from django.db.models import Exists, OuterRef # 先给用户模型添加一个临时字段标记是否有创建过Combination users_with_combinations = User.objects.annotate( has_created_combination=Exists( Combination.objects.filter(changed_by=OuterRef('pk')) ) ).filter(has_created_combination=True) # 转列表同样用list() user_list = list(users_with_combinations)
这种方式数据库只会执行一次高效的子查询,不会返回重复的用户数据,适合大规模数据场景。
内容的提问来源于stack exchange,提问作者altipard
相关产品推荐
相关产品推荐

