【发布时间】:2011-09-21 12:34:09
【问题描述】:
我有一个 Django 模型,其中包含应用程序功能的设置核心。你永远不应该删除这个模型。我正在尝试在整个应用程序范围内执行此操作。我已经在后台禁用了删除功能,也禁用了模型上的删除方法,但是 QuerySet 有它自己的删除方法。示例:
MyModel.objects.all()[0].delete() # Overridden, does nothing
MyModel.objects.all().delete() # POOF!
具有讽刺意味的是,Django 文档说为什么 delete() 是 QuerySet 而不是 Manager 上的方法:
这是一种安全机制,可防止您意外请求 Entry.objects.delete() 并删除所有条目。
至少可以说,必须包含.all() 是一种“安全机制”。相反,这实际上创建了一个无法通过常规方式(覆盖管理器)关闭的后门。
任何人都知道如何在像 QuerySet 这样核心的东西上覆盖这个方法而不用猴子修补源?
【问题讨论】:
标签: django