РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
617 of 818 menu

Метод has_add_permission

Метод has_add_permission используется в классе ModelAdmin для проверки, может ли пользователь добавлять новые объекты данной модели через административный интерфейс. Метод принимает объект запроса и возвращает логическое значение True, если пользователь имеет право на добавление, и False в противном случае. По умолчанию метод возвращает значение, основанное на стандартных разрешениях Django, но его можно переопределить для реализации собственной логики проверки прав.

Синтаксис

class MyModelAdmin(admin.ModelAdmin): def has_add_permission(self, request, obj=None): # Логика проверки права на добавление return super().has_add_permission(request, obj)

Пример

Рассмотрим простой пример, где доступ к добавлению объектов разрешён только суперпользователям:

from django.contrib import admin from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'status', 'author') def has_add_permission(self, request, obj=None): if request.user.is_superuser: return True return False admin.site.register(Article, ArticleAdmin)

Результат проверки для обычного пользователя:

False

Результат проверки для суперпользователя:

True

Пример

В этом примере разрешим добавление только тем пользователям, которые входят в определённую группу:

from django.contrib import admin from myapp.models import Category class CategoryAdmin(admin.ModelAdmin): list_display = ('name', 'created_at') def has_add_permission(self, request, obj=None): if request.user.groups.filter(name='Editors').exists(): return True return super().has_add_permission(request, obj) admin.site.register(Category, CategoryAdmin)

Результат выполнения кода для пользователя из группы 'Editors':

True

Пример

Более сложная логика: запретим добавление, если количество уже созданных объектов превышает определённый лимит:

from django.contrib import admin from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'status', 'author') def has_add_permission(self, request, obj=None): # Разрешаем добавлять не более 100 статей if Article.objects.count() >= 100: return False return super().has_add_permission(request, obj) admin.site.register(Article, ArticleAdmin)

Результат выполнения кода при количестве статей 100:

False

Смотрите также

  • метод has_change_permission,
    который проверяет право на изменение объектов
  • метод has_delete_permission,
    который проверяет право на удаление объектов
  • класс ModelAdmin,
    который управляет отображением модели в административной панели
  • декоратор admin.register,
    который регистрирует модель с её административным классом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить