Как обрабатывать сообщения об ошибках и проверку загруженных файлов с помощью django-formset?

Сокращенная версия

Я использую django-formset для создания контактной формы, которая включает поле для загрузки файла. При выборе неправильного файла сообщение об ошибке не отображается. При загрузке формы с неверным файлом поле очищается и для этого поля выдается ошибка "Пожалуйста, либо отправьте файл, либо установите флажок очистить, а не и то, и другое", которая является неточной. Поскольку поле очищено, я больше не могу его проверять и возвращаю описательное сообщение об ошибке.

Есть ли какая-либо документация, описывающая, как с этим следует обращаться?

Расширенная версия

Я хочу настроить проверку загружаемых файлов при использовании django-formset. Изначально я в основном хотел проверить файлы изображений, но позже также и другие типы.

Проблема номер один

Сообщения об ошибках не отображаются при выборе недопустимых файлов. При выборе слишком большого файла ничего не происходит (ошибки не отображаются, POST-запрос не отправляется, графический интерфейс не обновляется). Здесь я бы, по крайней мере, ожидал, что появится сообщение "Размер файла слишком велик" или что-то в этом роде. При выборе файла с недопустимым расширением отправляется запрос POST и графический интерфейс обновляется, чтобы отобразить выбранный файл (с допустимой миниатюрой или без нее). Однако сообщение об ошибке не отображается. Я ожидал увидеть сообщение типа "Этот тип файла не разрешен".

Как я понимаю, ответы в формате JSON не обрабатываются при выборе файла. Таким образом, создание конкретных ответов в формате JSON не будет работать "из коробки". Есть ли другой способ отобразить эти сообщения об ошибках? Например, используя элемент <meta name="error-messages" type_mismatch="File upload still in progress." pattern_mismatch="This is not a valid file." bad_input="File upload failed.">?

Проблема вторая

Несколько по теме: при отправке формы с недопустимым файлом (например, с неправильным расширением) я всегда получаю сообщение об ошибке формы {"uploaded_file": [{"message": "Please either submit a file or check the clear checkbox, not both.", "code": "contradiction"}]}. Это, по-видимому, связано с тем, что поле ввода становится пустым/удаляется из form.cleaned_data, если файл недействителен. Я хотел бы вывести более полезное сообщение, например, о том, что расширение неверно. Однако я больше не могу проверять файл, если он отсутствует в моих данных.

Главное, что я ищу, - это какая-нибудь документация. Как с такими вещами следует обращаться? У меня такое чувство, что я, возможно, что-то упустил из виду? Мы будем очень признательны за любую помощь.



Я использую Django 5.2.4, Django CMS 4.1.4 и django-formset 2.0.1

Мой класс form очень прост:

class ContactForm(forms.Form):
    name = fields.CharField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    email_address = fields.EmailField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    subject = fields.CharField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    message = fields.CharField(widget=widgets.Textarea(attrs={"placeholder": "","rows":"5"}))    
    uploaded_file = FileField(
        label="Image (optional)",
        widget=UploadedFileInput(attrs={
            'accept': 'image/jpeg,image/png,image/gif', 
            'max-size': MAX_UPLOAD_SIZE,
        }),
        help_text="JPEG, PNG, or GIF. Max file size 5 MB. We accept other formats after initial contact.",
        required=False,
    )

Обратите внимание, что я также опубликовал этот вопрос на github: https://github.com/jrief/django-formset/discussions/226

Вернуться на верх