Django admin site - ограничение содержимого сайта пользователем

admin.py:

from django.contrib import admin
from .models import Blog


admin.site.register(Blog)

Я понял, что Django admin очень хорошо служит моим потребностям. Единственное, что я хотел бы ограничить, это чтобы пользователи могли писать/читать/редактировать приложения блога, но только для своих собственных записей.

Если Алиса размещает блог, она может читать/писать/редактировать только свои записи, но не записи Боба. Позволяет ли Django сделать что-то подобное в админке сайта или мне нужно разработать свой код?

admin.py:

from django.contrib import admin
from .models import Blog

@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):

    def has_change_permission(self, request, obj=None):
        if obj is not None and obj.created_by != request.user:
            return False
        return True

    def has_delete_permission(self, request, obj=None):
        if obj is not None and obj.created_by != request.user:
            return False
        return True

В классе ModelAdmin есть метод get_queryset(), в котором можно указать, какие объекты будет видеть человек.

from django.contrib import admin
from .models import Blog

@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        return queryset.filter(author=request.user)

Вернуться на верх