【问题标题】:Python Django does not overwrite newly uploaded file with old onePython Django 不会用旧文件覆盖新上传的文件
【发布时间】:2018-06-28 05:40:10
【问题描述】:

我想在上传新文件时覆盖/替换文件。目前,该应用程序可以将文件上传到特定文件夹,但在上传新文件的情况下不会覆盖文件。我需要帮助来解决这个问题。

views.py

def uploadfunc(request):
    if request.method=='POST':
        form =uploadfileform(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            return render_to_response('upload_successful.html')
    else:
        form=uploadfileform()
    return render(request, 'upload.html',{'form':form})

models.py

class uploadfolder(models.Model):
    """ my application """
    File_to_upload = models.FileField(upload_to='')

forms.py

class uploadfileform(forms.ModelForm):
    class Meta:
        model=uploadfolder
        fields=('File_to_upload',)

【问题讨论】:

标签: python django django-views


【解决方案1】:

您可以使用 Django pre_save 信号来实现这一点,如果存在,它将在保存之前删除文件。

from django.db.models.signals import pre_save
from django.dispatch import receiver
import os

#It will activate whenever you will save file in uploadfolder model
@receiver(pre_save, sender=uploadfolder)
def file_update(sender, **kwargs):
    upload_folder_instance = kwargs['instance']
    if upload_folder_instance.id:
        path = upload_folder_instance.file_to_upload.path
        os.remove(path)

希望它会有所帮助。

【讨论】:

    【解决方案2】:

    感谢 @vermanil 我更新 models.py 对我有用。

    from django.db.models.signals import pre_save
    from django.dispatch import receiver
    import os
    
    class uploadfolder(models.Model):
        """ my application """
        File_to_upload = models.FileField(upload_to='')
    
    @receiver(pre_save, sender=uploadfolder)
    def file_update(sender, **kwargs):
        upload_folder_instance = kwargs['instance']
        if upload_folder_instance.File_to_upload:
            path = upload_folder_instance.File_to_upload.path
            os.remove(path)

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 2017-01-29
      • 2023-03-17
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2023-02-03
      • 2015-12-15
      相关资源
      最近更新 更多