Django管理员根据权限过滤行

Ale*_*xis 4 django django-admin django-admin-filters

在Django管理员中,我想只显示基于用户的某些模型行.

class Article(models.Model):
    text =          models.TextField(max_length=160)
    location =        models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)

因此,当用户登录管理站点并且是旧金山的一部分时location,他们应该只能看到Articles该位置.

Fra*_*llo 6

我想你想要的是ModelAdmin的查询集:

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset

class ArticleAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(ArticleAdmin, self).queryset(request)
        if request.user.profile.location: # If the user has a location
            # change the queryset for this modeladmin
            qs = qs.filter(location=request.user.profile.location)
        return qs
Run Code Online (Sandbox Code Playgroud)

这假设用户通过配置文件模型绑定到某个位置.