Django admin - пользовательские страницы администратора для определенных пользователей

В моем основном url роутера у меня есть два отдельных url, по одному для каждой страницы администратора, которые я установил в моем файле администратора:

  • /adminmain/ URL переходит к стандартной панели администратора (admin.site.urls), в которой зарегистрировано множество различных моделей.

  • Но я хочу, чтобы второй URL /adminonly/ шел только к пользователям, у которых is_admin = True в их пользовательском профиле.

Пока что мой admin.py файл ниже не достигает этой цели. Если я войду в систему как суперпользователь, то по обоим ссылкам будут показаны все модели, зарегистрированные на этой странице администратора. Но если я войду как не суперпользователь, который является администратором (is_admin = True), я просто получу сообщение: You don't have permission to view or edit anything. на ОБОИХ страницах. Я хочу, чтобы этот пользователь видел модели, зарегистрированные для страницы /adminonly/.

Мой admin.py:

from django.contrib.admin import ModelAdmin, site, AdminSite
from .models import Post

class PostAdmin(ModelAdmin):

    list_display = (
        'id',
        'slug',
        'title',
        'author',
        'publish_date'
    )
   
    def has_view_permission(self, request, obj=None):
        if request.user.is_admin:
            return True

    def has_add_permission(self, request):
        if request.user.is_admin:
            return True

    def has_change_permission(self, request, obj=None):
        if request.user.is_admin:
            return True

    def has_delete_permission(self, request, obj=None):
        if request.user.is_admin:
            return True

class PostsAdmin2(AdminSite):
    site_header = 'Posts Admin'

    def has_permission(self, request):
        return request.user.is_admin

posts_site2 = PostsAdmin2(name='PostsAdmin')

#default admin page- only for superusers, /adminmain/ URL goes here
site.register(Post, PostAdmin)
site.register(..many more models and Admin classes registered)

#second admin page- meant for any user with is_admin = True,  /adminonly/ URL goes here
posts_site2.register(Post, PostAdmin2)
Вернуться на верх