2017-08-08 60 views
-1

派生的对象,我有以下问题:Django的ORM删除另一个模型

class A (models.Model): 
    name = models.CharField(max_length=80, default="") 

class B(A): 
    another_name = models.CharField(max_length=80, default="") 

怎么可能得到一个当B被删除自动删除?如果我使用foreign_key并且DELETE_CASCADE都可以,但派生模型不行。

+0

名字你是如何确定哪一个对象连接到其中B –

+0

在B的数据库对象的对象有一个指针为什么不写一个自定义的一个 – mbieren

+0

的对象删除方法。这将是非常简单的解决方案 –

回答

0

基本上,可以为模型B编写自己的delete()方法以删除对象表单模型A. 但是,如果没有ForeignKey,您应该如何决定/知道哪个对象A需要级联,删除特定对象B?

+0

当使用django删除对象时,基础对象被删除。只是不在SQL级别。 Django ORM不会在数据库中设置DELETE CASCADE。 – mbieren

+0

我真的不明白。你说 - 纠正我,如果我错了 - 如果一个模型的对象用Django删除它不会被删除从数据库?或者你只是在继承模型上引用CASCADE删除? –

+0

我的意思是从数据库中删除一个继承的模型。如果使用django(或管理员)删除它,基础对象将被删除。如果您使用普通SQL,则基础对象(在这种情况下为A)不会被删除。 – mbieren

0

使用dbshel​​l和删除B对象时,一切都很好。 B类的基础对象也被删除(在这种情况下为A)。

Django不在数据库级别放置DELETE CASCADE。如果使用sql删除模型B对象一个对象保留在数据库中。

非常可怜

0

Info to MaxM。我想要下面的数据库约束。 Django不创建这个

ALTER TABLE B 
    ADD CONSTRAINT B_A_fkey FOREIGN KEY (A_ptr_id) 
     REFERENCES A (id) 
     ON UPDATE CASCADE ON DELETE CASCADE; 

它只模拟此行为。您的建议只允许我控制A_ptr_id

相关问题