【问题标题】:Django admin filter rows based on permissionsDjango admin 根据权限过滤行
【发布时间】:2012-08-08 02:56:15
【问题描述】:

在 Django 管理中,我想根据用户只显示模型的某些行。

class Article(models.Model):
    text =          models.TextField(max_length=160)
    location =        models.CharField(max_length=20)

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

【问题讨论】:

    标签: django django-admin django-admin-filters


    【解决方案1】:

    我认为你想要的是 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
    

    这假设用户通过个人资料模型绑定到某个位置。

    【讨论】:

      【解决方案2】:

      has_add_permissionhas_change_permissionhas_delete_permissioncustom ModelAdmin 一起使用(在admin.py 中):

      class ArticleAdmin(admin.ModelAdmin):
          def has_add_permission(self, request):
              # Nothing really to do here, but shown just to be thorough
              return super(ArticleAdmin, self).has_add_permission(request)
      
          def has_change_permission(self, request, obj=None):
              if obj is not None:
                  return obj.location == request.user.get_profile().location
              else:
                  return super(ArticleAdmin, self).has_change_permission(request, obj=obj)
      
          def has_delete_permission(self, request, obj=None):
              if obj is not None:
                  return obj.location == request.user.get_profile().location
              else:
                  return super(ArticleAdmin, self).has_delete_permission(request, obj=obj)
      admin.site.register(Article, ArticleAdmin)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-19
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 2020-07-09
        • 2014-01-30
        • 2012-03-01
        相关资源
        最近更新 更多