首页 > 解决方案 > 按用户组过滤 Django 管理站点

问题描述

我想使用 Django 用户组过滤管理站点上显示的对象。每个用户被分配到一个或多个代表不同类别文章的用户组。每篇文章都属于一个或多个类别(用户组和类别的名称相同)。在文章对象的管理站点上,用户只能看到他们所属类别的文章。通过在 ModelAdmin 中覆盖get_queryset并检索包含用户组名的列表,我找到了一种基本方法。但是我如何在ArticleAdmin中引用ArticleCategory模型来与组名进行比较?

模型.py

class Article(models.Model):
    title = models.CharField(max_length=200, default=None)

class Category(models.Model):
    name = models.CharField(max_length=50, default=None)

class ArticleCategory(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE, default=None)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=None)
    def __str__ (self):
        return(str(self.article) + " " + str(self.category))
    def natural_key(self):
        return ({'category': self.category})

管理员.py

class ArticleAdmin(admin.ModelAdmin):
    model = Article

    def get_queryset(self, request):
        if request.user.is_superuser:
            queryset = Article.objects.all()
        else:
            try:
                l = request.user.groups.values_list('name',flat = True)
                l_as_list = list(l)
                queryset = Article.objects.filter(??? in l_as_list)
            except:
                queryset = Article.objects.none()
        return queryset

admin.site.register(Article, ArticleAdmin)

以下行不起作用:

queryset = Article.objects.filter(articlecategory__category.name in l_as_list)

标签: djangodjango-modelsdjango-admin

解决方案


推荐阅读