Как обрабатывать сообщения об ошибках и проверку загруженных файлов с помощью 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