2013-05-01 101 views
0

我的模型沒有級聯刪除?Django級聯刪除選項?

我在下面稱爲'鏈接'的模型中有一個FK,刪除產品鏈接時不會被刪除。

class Product(models.Model): 
    name = models.CharField(max_length=80, blank=True) 
    objects = ContentManager() 
    #FK 
    link = models.ForeignKey(Link, related_name="content", null=True, blank=True) 

當我刪除產品FK仍然是,爲什麼?

刪除代碼:

@login_required 
def delete_product(request): 
    if request.POST: 
     product = get_object_or_404(Product, pk=request.POST['product_id']) 
      product.delete() 

鏈路模型:

class Link(models.Model): 
    link = models.URLField() 
    hits = models.IntegerField(default=0) 
+0

你需要發佈不止於此:在鏈路模型,您刪除代碼,以及一些查詢顯示之前和之後的你的數據庫的狀態。 – 2013-05-01 09:53:05

+0

@ e-satis已更新 – GrantU 2013-05-01 09:57:25

回答

3

你的外鍵是在錯誤的模型,應該是在鏈路模型。

我懷疑如果你現在刪除鏈接的實例,將刪除所有相關產品

+0

我需要FK在產品中,這是必需的,因爲鏈接被其他模型使用,例如圖像和RSS – GrantU 2013-05-01 10:04:11

+1

我正確的是刪除鏈接實例會刪除關聯的產品實例嗎?如果不是,那麼我會刪除這個答案 – 2013-05-01 10:07:54

+0

是的,它需要以相反的方式工作,你是對的,但模型沒有錯。然而,Django必須有東西強制這與我寫信號 – GrantU 2013-05-01 10:12:19

0

.delete方法並不當調用批量刪除;因爲Queryset會生成sql語句並直接執行它。所以刪除ForeignKey字段不會被調用。如果你這樣做,你可能需要使用pre_delete和/或post_delete信號。

https://docs.djangoproject.com/en/1.4/topics/db/queries/#topics-db-queries-delete

+0

這不是批量刪除。我更新了我的問題。 – GrantU 2013-05-01 09:59:33

+2

啊哈,正如我想的那樣,您使用'一對多'關係,'一個'是鏈接而'Many'是產品。 '刪除'一個'時刪除多個',''''一個''不刪除'一個'。 – 2013-05-01 10:08:28