class Basket:
name = models.CharField(max_length=50, blank=True, null=True)
class Apple:
name = models.CharField(max_length=50, blank=True, null=True)
basket = models.ForeignKey(Basket, on_delete=models.PROTECT)
。。。在
^{pr2}$。。。在
auto_created_basket = myapple.basket
myapple.basket = existing_basket
auto_created_basket.delete()
我试着把自动创建的篮子换成另一个篮子,但是当我试图删除它时,我得到了一个错误。在
"Cannot delete some instances of model 'Basket' because they are referenced through a protected foreign key: 'Apple.basket'", [<Apple: My apple>])
在您的
Apple
模型中,basket
字段是一个foreeng键其
on_delete
属性明确指出,当苹果所在的篮子被删除时,不应删除这些苹果。在正如official docs所说
以及
因此,最简单的步骤应该是删除
^{pr2}$on_delete
参数并使用默认行为但是请查看ForeignKey model field的所有可能参数,并选择适合您的应用程序/场景要求的组合。在
在删除篮子之前,可以尝试将苹果从
auto_created_basket
移到existing_basket
中:或者
^{pr2}$或者,如果要收集单个篮子中已删除篮子中的苹果,可以将函数分配给
on_delete
属性,如下所示:在
所以当一个篮子被删除时,篮子里苹果的
.basket
属性将自动设置为Basket(name='DELETED')
。在我不想回答我的问题,但我的例子过于简化。答案是非常好的。在
在实际产品中,涉及
post_save
信号,例如负责auto_created_basket
的创建。在问题是,当我说}。在
myapple.basket = existing_basket
Django的层是好的,但是DB仍然保留对旧关系的引用。在我的例子中,解决方案是在我再次保存myapple
之后移动{相关问题 更多 >
编程相关推荐