型号
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
中的任何内容,如果您对该列表进行迭代。
但你不需要创建一个列表,你可以简单地将用户添加到你的过滤器中