Myślę, że prawdopodobnie korzystasz z funkcji usuwania zbiorczego administratora i masz pewność, że metoda usuwania zbiorczego administratora nie wywołuje funkcji delete()
(zobacz powiązany kod ticket).
Mam już za sobą to w przeszłości, pisząc niestandardową akcję administratora do usuwania modeli.
Jeśli nie używasz zbiorczej metody usuwania administratora (np. Klikasz przycisk usuwania na stronie edycji obiektu), to dzieje się coś innego.
Patrz ostrzeżenie here:
„Usuń wybrane obiekty” działanie używa QuerySet.delete()
na efektywność powodów, które odgrywa ważną zastrzeżenie: Ten model jest delete()
metody nie zostanie wywołana.
Jeśli chcesz to zmienić, prostu napisać akcję niestandardową, która osiągnie, usunięcie w korzystny sposób - na przykład przez nazywając Model.delete()
dla każdej z wybranych pozycji z .
Więcej informacji na temat usuwania zbiorczego, można znaleźć w dokumentacji na stronie object deletion.
Mam zwyczaj modelu Administrator wygląda następująco:
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)
Być może nic nie usuwasz? Czy możesz pokazać nam, do czego wywołuje metodę delete()? – artagnon
Próbowałem go po prostu usuwając element w obszarze administracyjnym i nie wywoływał go ręcznie. – schneck