在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)
它对我有用。但是当我打开视频作为常规编辑器进行编辑时,它会将超级用户字段设置为编辑字段集。
我假设有某种模板缓存?
答案 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);
});
});
对象中的任何值,因此只有一个用户才能看到更改。