【问题标题】:django prevent delete of model instancedjango 防止删除模型实例
【发布时间】:2013-01-07 16:43:24
【问题描述】:

我有一个 models.Model 子类,它代表我的 mysql 数据库上的一个视图(即 managed=False)。

但是,在运行我的单元测试时,我得到:

DatabaseError: (1288, 'DELETE 的目标表 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 的行为——换句话说,任何具有指向要删除的对象的外键的对象都将被删除。

当应用于 (managed=False) 视图时,这似乎会导致问题。

我已尝试覆盖删除方法以防止删除:

class MyViewModel(models.Model):
    ...
    def delete(self, *args, **kwargs):
        pass # deletion of a view row is never valid

但这并没有解决问题。

如何防止这种行为?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    也许您可以尝试各种on_delete argument options 之一?

    即:

    problematic_field = models.ForeignKey(ActualTableModel, on_delete=models.PROTECT)
    

    【讨论】:

    • 感谢文档链接。我试过 on_delete=models.SET_NULL,但我忽略了 DO_NOTHING。后者修复了错误。
    猜你喜欢
    • 2016-12-12
    • 2011-06-17
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2016-03-18
    相关资源
    最近更新 更多