【发布时间】:2017-09-12 20:27:25
【问题描述】:
我正在尝试这样做,以便当有人尝试使用模型表单上传之前已经上传的文件时,该表单将阻止它提交。以下是相关代码:
models.py
class File(models.Model):
file = models.FileField(upload_to='documents/')
forms.py
class FileForm(forms.ModelForm):
file = forms.FileField()
class Meta:
model = File
fields = ('file',)
views.py
def file_upload(request):
if request.method == 'POST':
form = FileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('list_files')
else:
logger.error(form.errors)
else:
form = FileForm()
return render(request, 'files/file_upload.html', {'form': form})
假设有人上传了一个名为 document_1.xlsx 的文件。这段代码现在的方式是,如果有人尝试上传另一个名为 document_1.xlsx 的文件,它将上传并在点之前添加一些奇怪的后缀。我不想要那个。我希望表单不允许任何人在不破坏代码的情况下上传已经存在的文件。显然向模型中的文件字段添加 'unique=True' 是行不通的。我已经看到很多问题询问如何重命名文件,如果它已经存在,但我不希望这样。如果该文件名已经存在,我想完全停止它。谢谢。
编辑:我不相信这是另一个问题的重复。该问题询问如何覆盖具有相同名称的文件。这个问题是问如何防止同名文件上传。
【问题讨论】:
标签: python django file-upload