Python Django не перезаписывает вновь загруженный файл старым - PullRequest
0 голосов
/ 28 июня 2018

Я хочу перезаписать / заменить файл при загрузке нового файла. В настоящее время приложение может загрузить файл в определенную папку, но не перезаписывать файлы в случае, если был загружен новый файл. Мне нужна помощь, чтобы решить это.

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

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Спасибо @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)
0 голосов
/ 28 июня 2018

Этого можно добиться, используя сигнал 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)

Надеюсь, это поможет.

...