Creo que probablemente esté utilizando la función de eliminación masiva del administrador, y se está ejecutando el hecho de que el método de eliminación masiva del administrador no llama al delete()
(consulte el relacionado ticket).
He redondeado esto en el pasado al escribir una acción de administrador personalizada para eliminar modelos.
Si no está utilizando el método de eliminación masiva del administrador (por ejemplo, está haciendo clic en el botón Eliminar en la página de edición del objeto), entonces está sucediendo algo más.
Véase la advertencia here:
La acción “eliminar objetos seleccionados” utiliza QuerySet.delete()
para la eficiencia razones, que cuenta con una importante salvedad: método de su modelo delete()
no se llamará.
Si desea anular este comportamiento, escribe simplemente una acción personalizada, que lleva a cabo supresión en su forma preferida - por ejemplo, llamando Model.delete()
para cada uno de los elementos seleccionados .
Para obtener más información sobre la eliminación masiva, consulte la documentación en object deletion.
Mi modelo de administración personalizada se ve así:
from photoblog.models import PhotoBlogEntry
from django.contrib import admin
class PhotoBlogEntryAdmin(admin.ModelAdmin):
actions=['really_delete_selected']
def get_actions(self, request):
actions = super(PhotoBlogEntryAdmin, self).get_actions(request)
del actions['delete_selected']
return actions
def really_delete_selected(self, request, queryset):
for obj in queryset:
obj.delete()
if queryset.count() == 1:
message_bit = "1 photoblog entry was"
else:
message_bit = "%s photoblog entries were" % queryset.count()
self.message_user(request, "%s successfully deleted." % message_bit)
really_delete_selected.short_description = "Delete selected entries"
admin.site.register(PhotoBlogEntry, PhotoBlogEntryAdmin)
¿Tal vez no está borrando nada? ¿Puedes mostrarnos en qué estás invocando delete()? – artagnon
Lo probé simplemente borrando un elemento en el área de administración y no lo llamé manualmente. – schneck