基于 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())