在Django中,由于第二个(基于视图的)模型中的FK,无法删除模型实例



我在Django中定义了两个模型,第二个模型基于第一个模型,并且不受管理,因为它基于SQL Server视图(而不是表)的后端

class Embedder(models.Model):
  {my_fields...}
class MostRecent(models.Model):
  embedder = models.ForeignKey(Embedder)
  status = models.IntegerField()
  class Meta:
    db_table = 'embedder_most_recent'
    managed = False

问题是我不能删除Embedder的实例,因为这个错误:

View or function 'embedder_most_recent' is not updatable because the modification affects multiple base tables. (4405) (SQLExecDirectW)")

这个问题似乎存在于Django中,因为我可以毫无错误地删除SQL中的嵌入行。我该如何解决这个问题?

正如marcushep已经发布的那样,Django文档中有足够的文档来描述这种行为。

由于Django ForeignKey引用了另一个Django模型对象,任何删除父对象的尝试都意味着Django必须找到一种方法来管理引用ForeignKey的对象。您应该明确指定此行为。

以下示例将删除包含ForeignKey:的对象

class MostRecent(models.Model):
   embedder = models.ForeignKey(Embedder, on_delete=models.CASCADE)
   status = models.IntegerField()

尝试在删除时定义备用项。https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.on_delete

最新更新