Ich versuche es so zu machen, dass wenn jemand versucht, eine Datei, die bereits hochgeladen wurde, mit einem Modell-Formular hochzuladen, verhindert das Formular die Einreichung. Hier ist der relevante Code:Einen Datei-Upload vollständig verhindern, wenn die Datei bereits in Django existiert
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})
Sagen wir, jemand eine Datei hochgeladen genannt document_1.xlsx . Die Art, wie dieser Code jetzt ist, wenn jemand versucht, eine andere Datei namens document_1.xlsx hochzuladen, lädt sie hoch und fügt vor dem Punkt ein seltsames Suffix hinzu. Ich will das nicht. Ich möchte, dass das Formular niemandem erlaubt, eine Datei, die bereits existiert, zu übertragen, ohne den Code zu brechen. Anscheinend fügt das Hinzufügen von 'unique = True' zum Dateifeld im Modell nicht zu. Ich habe so viele Fragen gesehen, die fragen, wie man eine Datei umbenennt, wenn sie bereits existiert, aber das möchte ich nicht. Ich möchte es vollständig stoppen, wenn dieser Dateiname bereits existiert. Vielen Dank.
EDIT: Ich glaube nicht, dass dies ein Duplikat einer anderen Frage ist. Diese Frage fragt, wie eine Datei mit demselben Namen überschrieben wird. In dieser Frage wird gefragt, wie verhindert werden kann, dass eine Datei mit demselben Namen hochgeladen wird.
Mögliches Duplikat [Wie Django, um zu verhindern Ändern von Dateinamen, wenn eine Datei mit diesem Namen existiert bereits? ] (https://stackoverflow.com/questions/9214904/how-to-prevent-django-from-changing-file-name-when-a-file-with-that-name-ready) –
Docs: https://docs.djangoproject.com/de/1.11/ref/forms/validation/#cleaning-a-specific-field-attribute – allcaps