当用户上传文件时,其他用户可以使用它来附加到他们的项目。
class DashFile(models.Model):
dash_version = models.ForeignKey(DashVersion)
title = models.CharField(max_length=255)
file = models.FileField(upload_to=get_fs_upload_path, max_length=255)
display_order = models.IntegerField(default=99)
基本上,我克隆了DashFile,因此除了dash_version之外,所有值都保持不变。
现在,如果用户想要从他们的项目中删除该文件,该文件将被删除。但是,这会删除与该文件建立关联的所有其他用户的文件。
那么,我该怎么做才能当用户从他们的项目中“删除”文件时,文件实际上不会被删除?
我也知道设计选择不正确。我应该没有使用ForeignKey但是使用了多对多的字段。但我现在就在那里。
由于 埃里克
答案 0 :(得分:0)
这取决于您使用的Django版本。从1.2.5版FileField never deletes files from storage backend on model.delete()开始。
如果您使用Django< 1.2.5,则可以实现自定义FileStorage:
from django.core.files import storage
class NoDeleteStorage(storage.FileSystemStorage):
def delete(self, *a,**kw):
pass
nodelete_storage = NoDeleteStorage()
class DashFile(models.Model):
dash_version = models.ForeignKey(DashVersion)
title = models.CharField(max_length=255)
file = models.FileField(upload_to=get_fs_upload_path,
storage=nodelete_storage,
max_length=255)
display_order = models.IntegerField(default=99)