我有一个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
但这并没有解决问题。
我怎样才能防止这种行为?