2013-05-01 99 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