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

In Django, cannot delete model instance because of FK in second (and view-based) model

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

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 中的嵌入行。我该如何解决这个问题?

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

正如 marcusshep 已经发布的那样,Django 文档中有足够的文档说明此行为。

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

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

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