0

我有这些模型。问题是当我使用 Django Admin 删除一条狗记录时,关联的项圈记录没有被删除。

我在 Django 1.2 上。我认为级联删除是默认设置。将 Collar 链接到旧表是否存在问题?

非常感谢提前。

class Collar(models.Model):
    serial_number =  models.AutoField(primary_key=True, db_column='serial_number')
    weight = models.CharField(max_length=10)
    class Meta:
        db_table = u'existing_table_from_before_django_was_born'

class Dog(models.Model):
    size = models.CharField(max_length=10)
    collar = models.OneToOneField(Collar,blank=True, null=True, editable=False)
4

2 回答 2

2

这不是与旧表的连接问题。级联删除将在您删除 Collar 对象时起作用,然后相关的 Dog 对象将被删除(可能如果您删除 blank=True,null=True)。

要在删除 Dog 后删除 Collar,您需要重载 Dog 的 delete 方法。

于 2012-09-07T18:51:26.180 回答
2

您必须考虑关系以及删除级联存在的原因。FK 处于打开状态Dog(该字段位于 DB 中的表中)。如果你删除Dog,它只是删除Dog。没有必要删除任何其他内容。但是,如果您删除,那么如果与它关联的 没有也被删除Collar,那么您最终可能会遇到参照完整性问题。Dog在您的情况下,该字段可以为 NULL,因此您可以简单地将 col 字段设置为 NULL 并修复引用完整性问题,但在其他情况下,必须Dog删除该字段以保持数据库完整性。

删除级联通常非常方便,但重要的是要记住,它的目标不是让您的生活更简单,而是保持数据库的完整性。因此,没有动力清理关系的另一端(删除Collar时删除Dog),因为这不会导致任何问题。

于 2012-09-07T19:11:18.783 回答