Django - 关联的OneToOne记录未被删除

时间:2012-09-07 18:24:18

标签: django django-models django-admin

我有这些模特。问题是,当我使用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)

2 个答案:

答案 0 :(得分:2)

这不是与旧表连接的问题。级联删除将删除Collar对象,然后删除相关的Dog对象(可能删除blank = True,null = True)。

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

答案 1 :(得分:2)

您必须考虑关系以及为什么存在删除级联。 FK在Dog上(该字段位于数据库的表中)。如果您删除Dog,则只会删除Dog。没有必要删除任何其他内容。但是,如果您删除Collar,那么如果与其关联的Dog未被删除,则可能最终会出现参照完整性问题。在这种情况下,该字段是NULL,因此您可以简单地将衣领字段设置为NULL并修复参照完整性问题,但在其他情况下,Dog具有到删除以保持数据库完整性。

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