Я пытаюсь найти элегантное решение, чтобы проверить, существует ли уже загруженный пользователем файл.
- Пользователь загружает файл, используя SubmissionForm , в который входит только файл поле Submission class.
- Эта форма должна вычислить ha sh для файла, добавить его в экземпляр Submission и вычислить там проверки проверки.
- Если ограничение уникальности для значения ha sh нарушено, это должно вызвать ошибку проверки с использованием дубликата кода, чтобы форма могла напечатать соответствующее сообщение об ошибке.
Соответствующие файлы:
# models.py
class Submission(models.Model):
exercise = models.ForeignKey(Exercise, on_delete=models.PROTECT)
file_sha1 = models.CharField(max_length=40, editable=False, unique=True)
file = models.FileField(
upload_to=<... file saving ...>,
validators=[
<... validators ...>
],
)
# forms.py
class SubmissionForm(forms.models.ModelForm):
class Meta:
model = Submission
fields = ("file",)
widget = {"file": forms.FileField()}
error_messages = {
"file": {
<...error message codes + messages...>,
"duplicate": DUPLICATE_ERROR,
}
}
def save(self, exercise):
self.instance.exercise = exercise
return super().save()
Кроме того, у меня есть _generate_sha1(file)
метод хэширования файла. Я видел несколько решений этой проблемы с использованием проверки в views.py
, но я считаю, что это не подходящее место для этого. Я посмотрел на clean()
и clean_file()
, но мне не удалось заставить его работать.
Спасибо за вашу помощь.