基于 M2M 对象的权限组
Groups for M2M object based permissions
我不是 100% 确定这是我的糟糕设计,还是我没有想清楚。
我在 Category
模型上使用与 allowed_groups
具有 m2m 关系的 Group
模型。
class Category(models.Model):
"""Forums are separated into Categories. A Category may hold many Forums"""
name = models.CharField(max_length=80)
position = models.IntegerField(blank=True, default=0)
allowed_groups = models.ManyToManyField(
Group,
blank=True,
null=True,
help_text="Select what usergroups are able to see this forum.",
related_name='forum_categories',
)
class Meta:
ordering = ['position']
verbose_name = 'Category'
verbose_name_plural = 'Categories'
def __unicode__(self):
return u'%s' % self.name
我最初尝试将 m2m 用于 User
模型,但是我很快意识到将 Category
实例分配给 User
将变得非常乏味每次看到新的 User
注册。
我要实现的目标是获取 User
应该能够看到的 Category
个实例,这些实例由 Group
所在的内容定义。问题是,在任何给定时间,它们都可能在 1 Group
以内。
我尝试使用反向 forum_categories
,但是如果它们在多个组中,它会 returns 重复 Category
。
distinct()
方法从查询集中删除重复类别。试试这个:
Category.objects.distinct().filter(allowed_groups__in=user.groups.all())
我不是 100% 确定这是我的糟糕设计,还是我没有想清楚。
我在 Category
模型上使用与 allowed_groups
具有 m2m 关系的 Group
模型。
class Category(models.Model):
"""Forums are separated into Categories. A Category may hold many Forums"""
name = models.CharField(max_length=80)
position = models.IntegerField(blank=True, default=0)
allowed_groups = models.ManyToManyField(
Group,
blank=True,
null=True,
help_text="Select what usergroups are able to see this forum.",
related_name='forum_categories',
)
class Meta:
ordering = ['position']
verbose_name = 'Category'
verbose_name_plural = 'Categories'
def __unicode__(self):
return u'%s' % self.name
我最初尝试将 m2m 用于 User
模型,但是我很快意识到将 Category
实例分配给 User
将变得非常乏味每次看到新的 User
注册。
我要实现的目标是获取 User
应该能够看到的 Category
个实例,这些实例由 Group
所在的内容定义。问题是,在任何给定时间,它们都可能在 1 Group
以内。
我尝试使用反向 forum_categories
,但是如果它们在多个组中,它会 returns 重复 Category
。
distinct()
方法从查询集中删除重复类别。试试这个:
Category.objects.distinct().filter(allowed_groups__in=user.groups.all())