Форма Django с редактором MediumEditor не учитывает обязательный атрибут
В Django у меня есть TextField под названием 'description' в модели с null и blank, установленными на False (для проверки на стороне сервера и клиента). Я использую forms.ModelForm для извлечения поля и forms.Textarea для назначения атрибутов. В атрибутах я назначаю атрибут класса medium-editor-textarea для использования MediumEditor. Это поле работает, как и предполагалось, и действительно вызывается MediumEditor js, чтобы пользователь мог использовать MediumEditor wysiwyg в текстовой области; у меня также есть скрипт в шаблоне формы, который инициализирует новый экземпляр класса MediumEditor со всеми элементами, имеющими класс 'editable': var editor = new MediumEditor('.editable');
. Проблема заключается в том, что, хотя div и textarea содержат атрибут required, на стороне клиента не выдается сообщение о том, что это поле необходимо, когда пользователь отправляет форму. Вместо этого я постоянно получаю в консоли следующее сообщение об ошибке: An invalid from control with name='description' is not focusable
, и это указывает на тег textarea. Короче говоря, даже при наличии обязательных атрибутов подсказка браузера о том, что поле не может быть пустым, не срабатывает на стороне клиента. Вот соответствующий код, очищенный от других полей для удобства чтения:
models.py
class AModel(models.Model):
...
description = models.TextField(null=False, blank=False)
...
forms.py
class AModelForm(forms.ModelForm):
required_css_class = 'required'
class Meta():
model = AModel
fields = (...'description'...)
labels = {
...
'description':'Description',
...
}
widgets = {
...
'description': forms.Textarea(attrs={'class':'gls-textarea editable medium-editor-textarea gls-width-1-1 gls-height-small','rows':'5','data-placeholder':'Add a description...','required':'',}),
...
}
html в браузере (шаблон output):
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="csrfmiddlewaretoken" value="123456">
...
<p>
<label for="id_description" class="required">Description:</label>
<div class="gls-textarea editable medium-editor-textarea gls-width-1-1 gls-height-small medium-editor-element" id="medium-editor-123456" name="description" cols="40" rows="5" data-placeholder="Add a description..." required="" medium-editor-textarea-id="medium-editor-123456" contenteditable="true" spellcheck="true" data-medium-editor-element="true" role="textbox" aria-multiline="true" data-medium-editor-editor-index="1" medium-editor-index="123456-some-index" data-medium-focused="true"></div>
<textarea name="description" cols="40" rows="5" class="gls-textarea editable medium-editor-textarea gls-width-1-1 gls-height-small medium-editor-hidden" data-placeholder="Add a description..." required="" id="id_description" medium-editor-textarea-id="medium-editor-123456"></textarea>
</p>
...
<button class="gls-button gls-button-primary" type="submit">Post This Thing</button>
</form>