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

Метод delete_model

Метод delete_model класса ModelAdmin вызывается при удалении объекта из базы данных через интерфейс администратора. Он позволяет выполнить дополнительные действия до или после фактического удаления записи. Метод принимает три параметра: объект запроса request, объект модели obj, который будет удален, и принимает результат выполнения родительского метода. По умолчанию метод просто удаляет объект, но его можно переопределить для добавления дополнительной логики.

Синтаксис

class MyModelAdmin(admin.ModelAdmin): def delete_model(self, request, obj): # Дополнительная логика до удаления super().delete_model(request, obj) # Дополнительная логика после удаления

Пример

Давайте переопределим метод delete_model для вывода информации в консоль перед удалением статьи:

from django.contrib import admin from myapp.models import Article class ArticleAdmin(admin.ModelAdmin): def delete_model(self, request, obj): print(f"Deleting article: {obj.title}") super().delete_model(request, obj) print("Article deleted successfully") admin.site.register(Article, ArticleAdmin)

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

"Deleting article: My Article" "Article deleted successfully"

Пример

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

from django.contrib import admin from django.contrib import messages from myapp.models import Category class CategoryAdmin(admin.ModelAdmin): def delete_model(self, request, obj): if obj.article_set.exists(): messages.error( request, f"Cannot delete category '{obj.name}' - it has articles" ) else: super().delete_model(request, obj) admin.site.register(Category, CategoryAdmin)

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

"Cannot delete category 'News' - it has articles"

Пример

Давайте переопределим метод delete_model для логирования информации об удалении в отдельную модель:

from django.contrib import admin from myapp.models import Article, DeletedLog class ArticleAdmin(admin.ModelAdmin): def delete_model(self, request, obj): DeletedLog.objects.create( title=obj.title, deleted_by=request.user, deleted_at=timezone.now() ) super().delete_model(request, obj) admin.site.register(Article, ArticleAdmin)

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

"Log entry created for deleted article"

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

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