我有这些模特。问题是,当我使用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)
答案 0 :(得分:2)
这不是与旧表连接的问题。级联删除将删除Collar对象,然后删除相关的Dog对象(可能删除blank = True,null = True)。
要在删除Dog后删除Collar,您需要重载Dog的删除方法。
答案 1 :(得分:2)
您必须考虑关系以及为什么存在删除级联。 FK在Dog
上(该字段位于数据库的表中)。如果您删除Dog
,则只会删除Dog
。没有必要删除任何其他内容。但是,如果您删除Collar
,那么如果与其关联的Dog
未被删除,则可能最终会出现参照完整性问题。在这种情况下,该字段是NULL,因此您可以简单地将衣领字段设置为NULL并修复参照完整性问题,但在其他情况下,Dog
将具有到删除以保持数据库完整性。
删除级联通常最终非常方便,但重要的是要记住它的目标不是让您的生活更简单,而是保持数据库的完整性。因此,没有动机清理关系的另一端(删除Collar
时删除Dog
)因为没有问题。