如何阻止Django中的级联删除?

Hil*_*ell 4 python database django model

我在Django应用程序中有三个模型类:

class Folder(models.Model):
  ...
  folder = models.ForeignKey('Folder',null=True,blank=True,related_name='folders')
  front_thumbnail_image = models.ForeignKey('Image',verbose_name='Front Thumbnail',null=True,blank=True,related_name='front_thumbnail_for_folders')
  middle_thumbnail_image = models.ForeignKey('Image',verbose_name='Middle Thumbnail',null=True,blank=True,related_name='middle_thumbnail_for_folders')
  back_thumbnail_image = models.ForeignKey('Image',verbose_name='Back Thumbnail',null=True,blank=True,related_name='back_thumbnail_for_folders')

class Image(models.Model):
  ...
  folder = models.ForeignKey(Folder,related_name='images',null=True)

class ImageRepresentation(models.Model):
  ...
  image = models.ForeignKey(Image, related_name="image_representations")
Run Code Online (Sandbox Code Playgroud)

鉴于这个模型,当我Image在管理站点中删除一个时,我会期望ImageRepresentation与之关联的s也Image被删除,并且Folder封闭的内容Image将被单独留下.

管理站点告诉我,封闭Folder也将被删除.我该怎么做才能获得理想的行为?我查看了删除级联规则,但我尝试的任何东西似乎都没有用.

编辑添加三个外键Folder(缩略图图像)...我完全忽略了那些(显然).诚实,没有其他关系.

Ste*_*ier 12

正如托马斯所说,a的默认on_delete行为ForeignKeymodels.CASCADE.删除"父"模型时,将删除隐含"子"模型.

一个简单的解决方案是包含模型的on_delete=models.SET_NULL每个ForeignKeyto Image字段,Folder如下所示:

front_thumbnail_image  = models.ForeignKey('Image',on_delete=models.SET_NULL, null=True, ...)
middle_thumbnail_image = models.ForeignKey('Image',on_delete=models.SET_NULL, null=True, ...)
back_thumbnail_image   = models.ForeignKey('Image',on_delete=models.SET_NULL, null=True, ...)
Run Code Online (Sandbox Code Playgroud)


Tho*_*zco 5

当您创建的ForeignKey,什么时候父对象被删除被删除被控制on_delete参数

默认情况下,on_delete设置为models.CASCADE,这将在删除父对象时删除子对象。其他配置选项都不能创建您在此处报告的行为。

你有一个ForeignkeyFolderImageImageRepresentation?(您的情况下的文件夹缩略图)