在 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()
我在 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()