2016-12-13 48 views
0

這個問題可能很愚蠢,但我需要從SO社區進行驗證。使用外鍵刪除Django中的對象

我有2個型號。

class Address(models.Model): 
    name = models.CharField(max_length=100) 
    area = models.ForeignKey(Area, null=True) 


class Area(models.Model): 
    name = models.CharField(max_length=20) 

現在如果我想刪除一個地址實例,它是否會刪除它指向的外部對象的Area對象的實例?

address = Address.objects.filter(...).delete() 

PS:我知道,當一個外鍵對象被刪除在Django.It的on_delete功能是必需的,以防止那些指向這個外鍵的對象,這個參數也是如此。在我的情況下,情況是相反的。

回答

1

不,它不會刪除Area行,因爲它是一個外鍵字段。 所以在刪除Address實例時,相應的area實例不會被刪除,除非你重寫delete模型的方法來刪除實例。

0

這是一個開始學習數據庫操作的人的常見疑問。

正如你所提到的,在Django中有on_delete是不同的。

首先我們應該瞭解什麼是外鍵是。這是存儲一組數據的另一個表格。假設我們有一個條目地址1,面積爲area1。同樣,我創建一個地址爲地址2與同一區域area1。現在如果刪除地址1刪除area1也就不能獲得另一個實例的關係概念。一般來說,外鍵只是在數據庫中定義了一個新模型。您必須通過重寫默認方法來刪除FK實例。否則它不會刪除FK實例。

1

Area不會受到影響。但是,如果您刪除了Area,則Address將被刪除(因爲默認的on_delete行爲是級聯的)。