如何返回queryset而不是list



型号

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')

我做了什么:

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

这将返回正确的数据列表,但我希望使用queryset而不是list。

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

我试过这样做,但不正确。

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

您应该能够在单个查询中做到这一点

PermissionDetail.objects.filter(
perm=perm,
group__users=user
)

如果你得到重复的结果,你可能需要添加.distinct()

您创建的perm_details列表包含您附加的查询;这意味着您可以访问模型Group中的任何内容,如果您对该列表进行迭代。

但你不需要创建一个列表,你可以简单地将用户添加到你的过滤器中

相关内容

  • 没有找到相关文章

最新更新