在Django中,无法删除对象,因为视图不可更新

时间:2016-04-26 15:40:02

标签: sql-server django

我有一个名为Fiche的模型,其中包含charfield和一些外键。当我尝试删除一行时:

f = Fiche.objects.all()[0]
f.delete()

我收到以下错误:

('42000', "[42000] [FreeTDS][SQL Server]View or function 'entites_pilefusion_bFiche' is not updatable because the modification affects multiple base tables. (4405) (SQLExecDirectW)")

该观点部分基于Fiche好,但我应该可以删除一排Fiche,不是吗?实际上,当我尝试直接在SQL Server中删除同一行时,我没有问题。

问题是新问题,似乎在我在Fiche中添加新字段后出现。 我不知道如何解决甚至追踪问题。我完全迷失了,任何帮助都会非常感激。 帕特里克

编辑:我通过在PileFusionFiche的模型定义中添加(基于我的视图entites_pilefusion_bFiche)子句 on_delete = models.SET_NULL 来解决问题,以避免我视图上的ON DELETE CASCADE行为

class PileFusionFiche(models.Model):

entite = models.ForeignKey('entites.Entite')
fiche  = models.ForeignKey('docentites.Fiche',blank=True,null=True,on_delete=models.SET_NULL)

class Meta:
    db_table = 'entites_pilefusion_bFiche'
    managed = False

再次感谢@Bistabil。

1 个答案:

答案 0 :(得分:1)

我猜测从另一个表中添加字段后出现了问题。

https://msdn.microsoft.com/en-us/library/ms187956.aspx

关于可更新视图的段落是您感兴趣的。

您需要一个INSTEAD OF触发器才能使用视图影响多个表。