2013-05-01 4 views
0

내 모델이 계단식으로 삭제되지 않습니까?장고 캐스케이드 삭제 옵션은 무엇입니까?

제품 링크를 삭제할 때 '링크'라는 아래 모델의 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

: 링크 모델, 당신의 삭제 코드 및 이전과 이후에 보여주는 일부 쿼리 당신 db의 상태. –

+0

@ e-satis updated – GrantU

답변

3

귀하의 외래 키가 잘못된 모델에 있고 링크 모델에 있어야합니다.

나는 당신이 지금 링크 인스턴스를 삭제하면이 모든 관련 제품을 삭제 의심

당신은 그 이상을 게시해야합니다
+0

제품에 FK가 있어야합니다. 링크가 Image, RSS – GrantU

+1

과 같은 다른 모델에서 사용되므로 필수입니다. 링크 인스턴스를 삭제하면 연결된 제품 인스턴스가 삭제된다는 점에 맞습니까? 그렇지 않다면이 대답을 삭제할 것입니다. –

+0

네, 맞습니다.하지만이 모델이 잘못되어서는 안됩니다. 그러나 Django는 내 글쓰기에 강제로 신호를 보내야합니다. – GrantU

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

+2

아하, 내가 생각하기에, 당신은 일대 다 릴레이션을 사용하고, 하나는 링크이고, Many는 Product입니다. '하나'가 삭제되면 '많은'이 삭제되고, '많은'이 하나 인 경우 **는 삭제되지 않습니다. –