显示为不同用户组设置的不同模型admin list_display和字段

时间:2016-03-10 09:20:02

标签: django field admin editing

在django中,我有超级用户和一组内容编辑。

当我以超级用户身份编辑模型时,我希望能够编辑所有字段。如果有人以编辑身份登录,我希望他只允许编辑特定字段。

我用get_form方法完成了这项工作:

class VideoAdmin(admin.ModelAdmin):    
    editor_fields = ('description','description_rewrited')

    def get_form(self, request, obj=None, **kwargs):
        if not hasattr(request.user, 'perms_list'):
            request.user.perms_list = request.user.groups.values_list('name',flat=True)

        if 'video_description_rewriter' in request.user.perms_list:
            print('rewrite fields to normal')
            self.fields = self.normaluser_fields

        return super(VideoAdmin, self).get_form(request, obj, **kwargs)

它对我有用。但是当我打开视频作为常规编辑器进行编辑时,它会将超级用户字段设置为编辑字段集。

  1. 以超级用户身份打开管理模型 - http://joxi.ru/zAN5wWMIVjz429
  2. 以编辑器打开管理模型 - http://joxi.ru/p27LJPZiDNgeA7
  3. 现在,超级用户具有与编辑器相同的字段 - http://joxi.ru/L21jko5TW0ydAX
  4. 我假设有某种模板缓存?

1 个答案:

答案 0 :(得分:1)

当用户是编辑器时,您将self.fields设置为self.normaluser_fields,但是当用户为admin时,您没有将self.fields设置回默认值。 ModelAdmin个对象是在应用程序加载时创建的,它们在所有用户之间共享!

管理员进入页面时将字段更改回默认值将无法解决100%的问题。当admin和非admin用户同时尝试进入编辑页面时,可能会出现争用情况。它们都可以得到相同的字段。

您可以通过重写get_form方法来简化get_fields,而不是重写 def get_fields(self, request): if not hasattr(request.user, 'perms_list'): request.user.perms_list = request.user.groups.values_list('name',flat=True) if 'video_description_rewriter' in request.user.perms_list: print('rewrite fields to normal') return self.normaluser_fields return self.fields

ModelAdmin

该方法不会覆盖angular.module('starter', []).controller('myCntrl', function($scope,$http) { $http .get("http://www.w3schools.com/angular/customers.php") .then(function(response) { $scope.myData = angular.fromJson(response.data.records); }); }); 对象中的任何值,因此只有一个用户才能看到更改。