Restrict (allow) django user to change certain fields of the model

Let's say I have a blog model

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

      

I have a Model Administrator who makes sure the user can change which blog:

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 )

      

But I want to restrict the user group from changing the blog model field, for example the "author" group cannot change the author field through the admin panel.

How can i do this? Thanks in advance.

+3


source to share


1 answer


I think I found a way. I can override the method save_model

ModelAdmin

and do the following ...



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


source







All Articles