Django在保存新文件之前/之后删除旧文件和新文件

Posted

技术标签:

【中文标题】Django在保存新文件之前/之后删除旧文件和新文件【英文标题】:Django delete old and new file before/after save new 【发布时间】:2017-06-05 15:04:17 【问题描述】:

我在 django 视图中的代码:

file_obj = MyFile.objects.get(id=5)
old_preview = file_obj.preview_path
form = FilePreviewForm(request.POST, request.FILES, instance=file_obj)

if form.is_valid():
    print old_preview # /upload/files/hahaha.jpg
    print file_obj.preview_path # ololo.jpg
    # you can see different objects - it's good!

    old_preview.delete() # I want delete only /upload/files/hahaha.jpg - old file

    print old_preview #
    print file_obj.preview_path #
    # you can see all files are deleted!!! it's so bad!!!

为什么会这样?

如果我在保存后删除旧文件,它会是一样的。我查过了!

更新: http://pastebin.com/vB0SRzze - 这是错误的

UPD2: http://pastebin.com/bLNKbkLt

【问题讨论】:

请提供更多上下文? preview_path 是什么类型? FilePreviewForm 是做什么的? 无关:form.is_valid是一个函数,所以应该是form.is_valid() pastebin.com/vB0SRzze pastebin.com/bLNKbkLt - 关于 preview_path 和 FilePreviewForm @yedpodtrzitko 纠正这个,谢谢 【参考方案1】:

您没有保存表单,请先尝试这样做:

if form.is_valid():
    form.save()

成功了吗?阅读here

【讨论】:

表单保存,但 preview_path 为空 @Saksow 它改变了什么吗?你能发布新的输出吗? 但我说:try doing this FIRST 打印前必须保存,这是了解发生了什么的唯一方法

以上是关于Django在保存新文件之前/之后删除旧文件和新文件的主要内容,如果未能解决你的问题,请参考以下文章

修改 Django 迁移文件,或使用 --fake 标志?

保存文件名.m 删除了我原来的文件名.m 文件并用新文件替换它。怎么找回旧的?

Django:保存旧的查询集以供将来比较

每次创建新数据透视表并保存文件时,Excel工作簿的文件大小都会增加

Hibernate 将新元素保存在列表中而不删除旧元素

django的内置信号