如果文件存在,则覆盖文件并删除旧模型的对象

时间:2012-07-31 16:51:59

标签: django django-file-upload

我已经做了一些事情来覆盖已经上传的文件:

class OverwriteStorage(FileSystemStorage):
def get_available_name(self, name):
    if self.exists(name):
        os.remove(os.path.join(settings.MEDIA_ROOT, name))
    return name

但是我的文件在模型中:

class Work (models.Model):
    file = models.FileField(storage=OverwriteStorage(), upload_to=path)
    group = models.ForeignKey(Group, related_name='work_list')

新的上传会进行新的输入,所以我有:

  • 没有文件的模型(当我询问file.size时的错误..)

  • 我的新模特

删除文件后,如何删除模型?

我试图再次更改FileSystemStorage进程,但我不能使用任何参数(在doc中说并经过几个小时的测试;)),我也试图改变保存过程,但我没有成功..

2 个答案:

答案 0 :(得分:0)

在继续进行问题排查之前要检查的一些事项:

  • 您是否在settings.py文件中设置了MEDIA_ROOT和MEDIA_URL?
  • 有关管理文件
  • 的详细信息,请查看此link
  • 我会利用Django的built-in file storage而不是从头开始构建

答案 1 :(得分:0)

我的解决方案:

for work in groupwork : #It is the list of work associate with my group
    try :
       path = work.file.path.lstrip(SITE_ROOT+'/'+MEDIA_ROOT+'/').rstrip(request.FILES['file'].name)
       deletedwork = groupwork.get(file=path+request.FILES['file'].name)
       deletedwork.delete()
    except:
       pass