2014-02-17 64 views
1

我想在删除品牌时防止产品被删除。这是我的代码:信号中的代码未执行

from django.db.models.signals import pre_delete 
from shop.models import Brand, Product 


def before_deleting_brand(sender, instance, **kwargs): 
    """ 
    Detach products from the brand upon brand deletion 
    """ 

    Product.objects.filter(brand=instance).update(brand=None) <<< LINE HAS NO EFFECT 


pre_delete.connect(before_deleting_brand, sender=Brand) 

任何想法为什么它不工作?

回答

1

检查是否有间接链接Product型号到Brand的任何型号。

顺便说一句,指定on_delete参数是防止删除引用对象的更简单的方法。

例如:

class Product(models.Model): 
    brand = models.ForeignKey(Brand, blank=True, null=True, on_delete=models.SET_NULL) 
+0

谢谢你这么多的on_delete = models.SET_NULL。 –

+0

@AdamSilver,问题是什么? “产品”和“品牌”之间是否存在间接联系? – falsetru

+0

我不认为有间接的联系,不知道为什么它不起作用。无论如何,on_delete完美运行并且更加清洁。 –