Python 如何返回queryset而不是list?

Python 如何返回queryset而不是list?,python,django,django-rest-framework,Python,Django,Django Rest Framework,模型 我所做的: class Permission(models.Model): name = models.CharField(max_length=250, unique=True) class PermissionDetail(): perm = models.ForeignKey( Permission, on_delete=models.CASCADE, related_name='perm_details') group = models

模型

我所做的:

class Permission(models.Model):
    name = models.CharField(max_length=250, unique=True)  

class PermissionDetail():
    perm = models.ForeignKey(
        Permission, on_delete=models.CASCADE, related_name='perm_details')
    group = models.ForeignKey(
        'Group', blank=True, null=True, related_name='group_perms', on_delete=models.CASCADE)

class Group():
    name = models.CharField(max_length=250)
    users = models.ManyToManyField(User, blank=True, related_name='groups')
    permissions = models.ManyToManyField(Permission, blank=True, related_name='permissions')
这将返回正确的数据列表,但我希望使用queryset而不是list

我如何返回查询集而不是在此处列出列表

我试过这样做,但不对

 user_groups = user.groups.all()
 perm_details = []
 for group in user_groups:
     perm_details.append(group.group_perms.filter(perm=perm))
 return perm_details

您应该能够在单个查询中完成此操作

PermissionDetail.objects.filter(perm=perm, groups__pk__in=user_groups)

如果您得到重复的结果,您可能需要添加
.distinct()
您制作的
perm\u details
列表包含您附加的查询;这意味着您可以访问模型
组中的任何内容,如果您遍历该列表


但是您不需要创建列表,只需将用户添加到过滤器中即可

您可以直接返回用户组,但这里的perm是什么?group.group\u perms.filter(perm=perm)如果您有两种不同的型号,可以使用
itertools.chain
。如果queryset使用相同的模型,则可以使用
|
-运算符
PermissionDetail.objects.filter(
    perm=perm,
    group__users=user
)