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行为ForeignKey是models.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)
当您创建的ForeignKey,什么时候父对象被删除被删除被控制的on_delete参数。
默认情况下,on_delete设置为models.CASCADE,这将在删除父对象时删除子对象。其他配置选项都不能创建您在此处报告的行为。
你有一个Foreignkey从Folder到Image或ImageRepresentation?(您的情况下的文件夹缩略图)