我有 admin.py 如下:
class profilesAdmin(admin.ModelAdmin):
list_display = ["type","username","domain_name"]
现在我想在删除对象之前执行一些操作:
class profilesAdmin(admin.ModelAdmin):
list_display = ["type","username","domain_name"]
@receiver(pre_delete, sender=profile)
def _profile_delete(sender, instance, **kwargs):
filename=object.profile_name+".xml"
os.remove(os.path.join(object.type,filename))
如果我使用这样的删除信号方法,我会收到一条错误消息
self
应该是第一个参数。如何修改上述功能?
我想检索被删除对象的 profile_name。如何才能做到这一点?
我还尝试覆盖 delete_model 方法:
def delete_model(self, request, object):
filename=object.profile_name+".xml"
os.remove(os.path.join(object.type,filename))
object.delete()
但是如果必须一次删除多个对象,这将不起作用。
最佳答案
您的 delete_model
走在正确的轨道上方法。当 django 管理员一次对多个对象执行操作时,它使用 update function .但是,正如您在文档中看到的,这些操作仅使用 SQL 在数据库级别执行。
您需要添加您的 delete_model
方法作为 custom action在 Django 管理员中。
def delete_model(modeladmin, request, queryset):
for obj in queryset:
filename=obj.profile_name+".xml"
os.remove(os.path.join(obj.type,filename))
obj.delete()
然后将您的功能添加到您的模型管理员 -
class profilesAdmin(admin.ModelAdmin):
list_display = ["type","username","domain_name"]
actions = [delete_model]
关于Django 管理员 : override delete method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15196313/