I use django-widget-tweaks
for validation like this
{% if form.is_bound %}
{% if form.action.errors %}
{% render_field form.action class="form-control is-invalid" %}
{% for error in form.action.errors %}
<div class="has-error">
{{ error }}
</div>
{% endfor %}
{% else %}
{% render_field form.action class="form-control is-valid" %}
{% endif %}
{% else %}
{% render_field form.action class="form-control" %}
{% endif %}
It works well but when I use two fields, my code will be.
{% if form.is_bound %}
{% if form.action.errors %}
{% render_field form.action class="form-control is-invalid" %}
{% for error in form.action.errors %}
<div class="has-error">
{{ error }}
</div>
{% endfor %}
{% else %}
{% render_field form.action class="form-control is-valid" %}
{% endif %}
{% else %}
{% render_field form.action class="form-control" %}
{% endif %}
{% if form.is_bound %}
{% if form.action2.errors %}
{% render_field form.action2 class="form-control is-invalid" %}
{% for error in form.action2.errors %}
<div class="has-error">
{{ error }}
</div>
{% endfor %}
{% else %}
{% render_field form.action2 class="form-control is-valid" %}
{% endif %}
{% else %}
{% render_field form.action2 class="form-control" %}
{% endif %}
It doesn't look cool... If I use three, four fields code will be longer and longer.
Is there any best practice for this purpose??