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 to share