Пользовательский виджет 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 }}
Вернуться на верх