Django Admin: ограничить персонал для обновления - PullRequest
2 голосов
/ 22 июня 2019

у меня было Blog Model.Все новые сообщения блога имеют статус DRAFT.

На странице администратора администратором будут все разрешения (CRUD) для Blog Model.Я могу решить эту проблему с помощью метода register Джанго.

Я хочу is_staff, чтобы пользователь мог просмотреть все Blog Post, но не может обновить статус (например, с DRAFT до APPROVE).

Есть ли способ проверить группу request, затем разрешить пользователю обновление или нет?Спасибо.

1 Ответ

2 голосов
/ 22 июня 2019

Самое простое решение - пометить поле 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 []
...