django 防止删除模型实例
我有一个模型的子类,它代表了我在mysql数据库中的一个视图(也就是说,管理状态是False)。
但是,当我运行单元测试时,出现了以下错误:
数据库错误: (1288, '目标表 my_view_table 的删除操作不可更新')
这个删除请求的来源是通过一个外键(间接)发起的。我简化了一下代码:
class MyViewModel(models.Model):
problematic_field = models.ForeignKey(ActualTableModel) # specifying on_delete=models.SET_NULL simply replaces the DELETE error with an UPDATE one
在我的测试的清理阶段,我删除了 ActualTableModel 的实例,而看起来 Django 正在遵循文档中描述的行为:
当 Django 删除一个对象时,它会模拟 SQL 中的 ON DELETE CASCADE 约束的行为——换句话说,任何指向要删除对象的外键的对象也会被一并删除。
这在应用到(管理状态为False的)视图时似乎造成了问题。
我尝试重写删除方法来防止删除:
class MyViewModel(models.Model):
...
def delete(self, *args, **kwargs):
pass # deletion of a view row is never valid
但这并没有解决问题。
我该如何防止这种行为呢?
1 个回答
10
也许你可以试试不同的 on_delete 参数选项?
比如说:
problematic_field = models.ForeignKey(ActualTableModel, on_delete=models.PROTECT)