我需要获取每个用户拥有的用户列表和权限列表(监护人对象权限)。问题是我试图这样做的每一种方式都会遇到 N+1 问题。我是否只是简单地遍历用户列表并从集合中获取权限
for user in User.objects.all():
data = UserSerializer(user).data
data['permissions'] = PermissionSerializer(user.userobjectpermission_set, many=True)
或者如果我使用 prefetch_related()
for user in User.objects.prefetch_related('userobjectpermission_set'):
data = UserAndPermSerializer(user).data
它最终首先获取用户列表,然后为每个用户运行单独的权限查询。
我可以编写一个原始 SQL 语句并自己序列化它,但我宁愿使用我已经拥有的序列化程序,因此我希望将用户和权限作为模型实例。有什么方法可以使用 ORM 完成我所需要的吗?
Django 是 1.11 LTS 版本,我不能很快升级到 2.x。