基于M2M对象的权限的组

时间:2015-01-13 10:10:49

标签: python django permissions many-to-many django-queryset

我不是百分百确定这是否只是我的一个糟糕的设计,或者我没有想清楚。

我正在Group模型上使用allowed_groups模型与Category建立{m2}的关系。

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个实例会非常繁琐每次新的Category注册。

我想要实现的目标是获取User Group应该能够看到的Group实例所定义的forum_categories个实例。问题是,他们是在任何给定时间都可能超过1 Category

我尝试使用反向{{1}},但如果它们在多个组中,则会返回{{1}}的重复项。

1 个答案:

答案 0 :(得分:1)

distinct()方法从查询集中删除重复的类别。试试这个:

Category.objects.distinct().filter(allowed_groups__in=user.groups.all())