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

Метод has_delete_permission

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

Синтаксис

class MyModelAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj=None): # Custom logic return super().has_delete_permission(request, obj)

Метод принимает следующие параметры:

  • ⁅b⁆request⁅/b⁆ - объект HTTP-запроса, содержащий информацию о текущем пользователе и сессии;
  • ⁅b⁆obj⁅/b⁆ - объект модели, который планируется удалить, либо None при проверке прав на удаление объектов в списке.

Пример . Использование

Допустим, мы хотим разрешить удаление объектов только суперпользователям. Для этого переопределим метод в нашем классе административной панели:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj=None): # Allow deletion only for superusers if request.user.is_superuser: return True return False

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

"True"

Теперь только пользователи с флагом is_superuser смогут удалять статьи через панель администратора.

Пример . С проверкой конкретного объекта

Метод также позволяет выполнять проверку для каждого объекта отдельно. Например, разрешим удаление только тех статей, которые принадлежат текущему пользователю:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj=None): # Allow deletion only if the article belongs to the current user if obj is not None and obj.author == request.user: return True return super().has_delete_permission(request, obj)

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

"True"

В этом случае пользователь сможет удалить статью только в том случае, если он является её автором.

Пример . С использованием групп

Разрешим удаление объектов только пользователям, состоящим в группе "Модераторы":

from django.contrib import admin from django.contrib.auth.models import Group from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj=None): # Allow deletion only for users in the "Moderators" group if request.user.groups.filter(name="Moderators").exists(): return True return False

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

"True"

Теперь удаление статей доступно только модераторам.

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

  • метод has_add_permission,
    который проверяет права на добавление объектов
  • метод has_change_permission,
    который проверяет права на изменение объектов
  • метод delete_model,
    который выполняет фактическое удаление объекта
  • атрибут actions,
    который определяет доступные массовые действия в списке объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить