Пользовательский виджет Django: как получить доступ к ошибке поля?
Я стараюсь иметь больше контроля над рендерингом формы и шаблона.
Изначально я использовал django-crispy, но если Layout дает огромный выбор настроек, я подумал, что он становится запутанным...
Итак, я перешел к настройке виджетов, следуя документации django и этому сайту https://www.webforefront.com/.
Сначала я столкнулся с проблемой рендеринга метки поля. Я решил эту проблему, передав аргумент label в attrs CustomWidget, но не уверен, что это хорошая практика.
Но моя главная проблема - это ошибки рендеринга... Как я могу с этим справиться?
шаблон для ввода CustumoInput.html
<div class="row mb-0">
<div class="input-group input-group-sm col-6 rounded">
<label>{{ widget.label }}</label>
</div>
<div class="input-group input-group-sm mb-1 col-2">
<input
type="{{ widget.type }}"
name="{{ widget.name }}"
id="id_{{ widget.name }}"
class = "textinput textInput form-control"
{% if widget.value != None %}
value="{{ widget.value }}"
{% endif %}
{% include "django/forms/widgets/attrs.html" %}
/>
{% for error in widget.errors %}
<div class="invalid-feedback">{{ error }}</div>
{% endfor %}
</div>
</div>
widgets.py
from django import forms
class custom_input(forms.widgets.Input):
template_name = 'ecrf/CustomInput.html'
input_type = 'text'
def __init__(self, attrs={}):
super(custom_input, self).__init__(attrs)
def get_context(self, name, value, attrs):
context = super(custom_input, self).get_context(name, value, attrs)
context['widget']['label'] = self.attrs['label']
context['widget']['attrs']['placeholder'] = self.attrs['placeholder']
context['widget']['attrs']['autocomplete'] = self.attrs['autocomplete']
context['widget']['attrs']['data-mask'] = self.attrs['data-mask']
return context
forms.py
self.fields['inc_tai'] = forms.IntegerField(label = 'Taille (mesurée ou déclarée, en cm)',widget=custom_input(attrs={'label':'Taille (mesurée ou déclarée, en cm)','autocomplete': 'off','placeholder': '000','data-mask':'000'}),required=False,disabled=True)
template.htlm (использование)
{{ form.inc_tai }}