2013-12-20 135 views
2

因此,每个模型都带有一些常用功能,例如savedeleteDjango禁用模型删除

删除通常会被覆盖以将诸如is_active之类的布尔字段设置为false,这样数据就不会丢失。但是有时候存在一个模型,它具有的信息一旦创建就应该始终存在,甚至永远不会“不活跃”。我想知道什么最佳实践处理这个模型的delete方法会是什么?

想法

使其根本没用:

def delete(self): 
    return False 

但只是似乎很奇怪。是否有Meta选项来禁用删除?有没有“好”的方法来做到这一点?

回答

0

嗯,这取决于你不能真正限制删除,因为有人总是可以在查询集上调用delete()或者只是简单地使用DELETE sql命令。如果你想在django admin中禁用删除按钮,你应该看看here

+0

Django admin与此无关。我知道我无法摆脱SQL'DELETE',但我想以一种很好的方式将它从模型和查询集中移除。只有那些能够删除这些实例的人才能够访问实际的数据库,但那些有权访问django查询的人不应该能够 –

+1

然后是的,重写模型上的删除并使用自定义管理器创建自定义查询集禁用该功能。您还需要查看通过遍历关系可以获得的相关查询集。 –

+2

而且如果人们有权访问django应用程序,他们是否有权访问数据库?我将数据库级别的删除限制为只有管理员或其他东西。 –