【问题标题】:UpdateView FileField not deleting previous files Django pythonUpdateView FileField不删除以前的文件Django python
【发布时间】:2018-06-21 06:43:16
【问题描述】:

我有:

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] 

但我不知道在哪里可以使用吸管。

模型.py

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'])])

【问题讨论】:

    标签: django python-3.x django-models django-forms django-views


    【解决方案1】:

    您可以像这样覆盖模型的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)
    

    【讨论】:

    • 请更详细地解释一下,我可以看到这是怎么回事,但我要求更详细地解释它的作用,我只是想了解它的作用,因为它可能会侵入我的用户注册。
    • @Zealot91 此代码将在用户保存期间执行。如果用户不是新用户(self.pk 不为空),代码将检查文件是否被更改并在这种情况下删除旧文件。
    • 但是当我注册一个新用户时它会有什么反应呢?等等,我想我明白了,这只会影响文件字段...对吗?
    • @Zealot91 是的,它只会影响文件。
    猜你喜欢
    • 2013-04-09
    • 2011-08-22
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多