私は、誰かが既にモデルフォームでアップロードされているファイルをアップロードしようとすると、フォームが投稿できないようにしようとしています。ここに関連するコードは次のとおりです。ファイルがDjangoにすでに存在する場合、ファイルアップロードを完全に防ぐ
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'を追加しても機能しません。私はファイルが既に存在する場合、ファイルの名前を変更する方法を尋ねる多くの質問を見てきましたが、私はそれを望んでいません。そのファイル名が既に存在する場合は、完全に停止します。ありがとう。
編集:これは別の質問と重複しているとは思わない。その質問は、同じ名前のファイルを上書きする方法を尋ねます。この質問は、同じ名前のファイルがアップロードされないようにする方法を尋ねています。
その名前のファイルが既に存在する場合は、ファイル名を変更するのDjangoのを防止する【使い方の可能性のある重複? ](https://stackoverflow.com/questions/9214904/how-to-prevent-django-from-changing-file-name-when-a-file-with-that-name-already) –
文書:https:/ /docs.djangoproject.com/ja/1.11/ref/forms/validation/#cleaning-a-specific-field-attribute – allcaps