UpdateView FileField不删除以前的文件Django python

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UpdateView FileField不删除以前的文件Django python相关的知识,希望对你有一定的参考价值。

我有:

class UserUpdateView(UpdateView):
fields = ("file_one", "file_two")
model = User

它工作...但并不总是,我放入另一个文件,路径改变,但当我进入另一个def的文件进程,它保留以前的文件值,我知道因为我检查了我的媒体文件夹看它是否在那里,它在相应的文件夹中,但也包括我测试和阅读的所有其他文件。我不得不手动删除它们,只有我的新文件。

如何删除以前的文件?或者我需要做什么:

def Inputfiles(request):
form = UploadFilesForm(request.POST, request.FILES, instance=request.user)
if request.method == "POST":

    if form.is_valid():
        form.save()
        return redirect('index')
    else:
        form = UploadFilesForm()

    return render(request, 'registration/File_Upload.html', {'form': form})
else:
    return render(request, 'registration/File_Upload.html', {'form': form})

我唯一想不到的是添加一个

request.user.file_one.delete() from [documentation delete()][1] 

但我不知道在哪里放线条如果它甚至可以工作。

models.朋友

class User(AbstractUser):
email = models.EmailField(unique=True)
file_one = models.FileField(upload_to='csvfiles', validators=[FileExtensionValidator(allowed_extensions=['csv'])])
file_two = models.FileField(upload_to='csvfiles', validators=[FileExtensionValidator(allowed_extensions=['csv'])])
答案

您可以像这样覆盖模型的save()以在更新期间删除旧文件:

class User(AbstractUser):
    ...
    def save(self, *args, **kwargs):
        if self.pk:
            this_record = User.objects.get(pk=self.pk)
            if this_record.file_one != self.file_one
                this_record.file_one.delete(save=False)
        super(User, self).save(*args, **kwargs)

以上是关于UpdateView FileField不删除以前的文件Django python的主要内容,如果未能解决你的问题,请参考以下文章

Django中的UpdateView显示空白表单而不是数据库以前的数据

在UpdateView上获取删除按钮以重定向时出现问题

Django:仅更新UpdateView中已更改的字段

使用FileField编辑表单将删除该文件

url中没有pk的Django UpdateView

我可以同时使用 UpdateView 和 DeleteView 制作视图吗?