2015-05-23 10 views
3

Предположим, что у меня есть модель дневникОграничение (разрешение) Джанго пользователя сотрудников от изменения определенных полей модели

class Blog(models.Model): 
    author = models.ForeignKey(User) 
    title = models.CharField(max_length=250, unique=True) 
    body = models.TextField() 

У меня есть модель администратора, которая гарантирует то, что пользователь может изменить какой блог:

class BlogAdmin(admin.ModelAdmin): 

    def has_add_permission(self, request): 
     return request.user.groups.filter(name='author').exists() 

    def has_change_permission(self, request, obj=None): 
     return request.user.groups.filter(name='editor').exists() or (request.user.groups.filter(name='author').exists() and Blog.objects.filter(pk=obj, author=request.user).count() >0) 

    def has_delete_permission(self, request, obj=None): 
     return request.user.groups.filter(name='editor').exists() or (request.user.groups.filter(name='author').exists() and Blog.objects.filter(pk=obj, author=request.user).count() >0) 

Но я хочу ограничить группу пользователей от изменения поля модели блога, например, «авторская» группа не может изменить поле автора через панель администратора.

Как я могу это сделать? Спасибо заранее.

ответ

2

Я думаю, что нашел способ. Я могу переопределить save_model метод ModelAdmin и сделайте следующее ...

class ArticleAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change): 
     if request.user in permited user: 
      obj.save() 
     else: 
      raise forms.ValidationError("you can't do that.") 
+2

Вы также можете использовать '' get_readonly_fields() '': https://docs.djangoproject.com/en/1.7/ref/contrib/ admin/# django.contrib.admin.ModelAdmin.get_readonly_fields, чтобы пользовательский интерфейс поля не изменялся – gipi

Смежные вопросы