Django:删除文件的关联,但实际上不删除文件

时间:2011-08-04 15:21:34

标签: django

当用户上传文件时,其他用户可以使用它来附加到他们的项目。

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但是使用了多对多的字段。但我现在就在那里。

由于 埃里克

1 个答案:

答案 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)