Django: проверка уникальности загруженных пользователем файлов с помощью хэшей - PullRequest
0 голосов
/ 29 апреля 2020

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

  1. Пользователь загружает файл, используя SubmissionForm , в который входит только файл поле Submission class.
  2. Эта форма должна вычислить ha sh для файла, добавить его в экземпляр Submission и вычислить там проверки проверки.
  3. Если ограничение уникальности для значения 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(), но мне не удалось заставить его работать.

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...