Самое простое решение - пометить поле status
как доступное только для чтения в классе администратора, установив readonly_fields
:
from django.contrib import admin
from .models import BlogPost
@admin.register(BlogPost):
class BlogPostAdmin(admin.ModelAdmin):
readonly_fields = ('status',)
Обратите внимание, что это status
только для чтения для всех пользователей с правами администратора.Если вам нужно более детальное управление в зависимости от текущего пользователя, есть способ get_readonly_fields
, который вы можете переопределить.
Кроме того, поскольку ВСЕ пользователи администратора Django имеют is_staff
мы явно проверим наличие встроенного разрешения для изменения BlogPost
.
class BlogPostAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
# obj is None if we're creating a new BlogPost, or a BlogPost instance
# if we are editing an existing BlogPost
if not request.user.has_perm("your_app.change_blogpost"):
return ("status",)
return []