gpt4 book ai didi

python - 如何阻止这种级联删除在 Django 中发生?

转载 作者:太空狗 更新时间:2023-10-30 01:58:47 25 4
gpt4 key购买 nike

我在 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")

鉴于此模型,当我在管理站点中删除一个 Image 时,我希望与该 Image 关联的 ImageRepresentation 是也被删除,包含该 ImageFolder 将被单独保留。

管理站点告诉我封闭的 Folder 也将被删除。我该怎么做才能获得所需的行为?我查看了删除级联规则,但似乎没有任何效果。

编辑Folder 上添加三个外键(缩略图)...我完全忽略了那些(很明显)。老实说,没有其他关系。

最佳答案

正如 Thomas 所说,ForeignKey 的默认 on_delete 行为是 models.CASCADE。暗示删除“父”模型时将删除“子”模型。

一个简单的解决方案是将 on_delete=models.SET_NULL 包含到 Folder 的每个 ForeignKeyImage 字段中 像这样的模型:

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, ...)

关于python - 如何阻止这种级联删除在 Django 中发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com