Django. Вывод ошибки валидации в шаблон
Подскажите как вывести ошибку ValidationError в шаблон рядом с полем формы которая вызвала ошибку ? сам код правильно обрабатывает проверку, и не записывает то что не надо, но он не выводит это в шаблоне, а просто сбрасывает все поля
forms.py
class NetworkForm(forms.ModelForm):
def clean_network(self):
network_object = self.cleaned_data['network']
all_object_network = Networks.objects.all()
received_subnet = ipaddress.ip_network(str(network_object))
frozen_received_subnet = set(received_subnet)
for network_in_table in all_object_network:
subnet_in_table = ipaddress.ip_network(str(network_in_table))
frozen_subnet_in_table = set(subnet_in_table)
difference = frozen_received_subnet & frozen_subnet_in_table
if not difference:
print('Значение пустое')
if difference:
print('Значение не пустое')
raise ValidationError('asdasdasdasd')
return network_object
class Meta:
model = Networks
fields = '__all__'
views.py
def networking(request, region_id):
networks = Networks.objects.all().order_by('network')
networks_for_region = Networks.objects.filter(region_reletionship=region_id)
form = NetworkForm()
parametrs = {
'networks':networks,
'networks_for_region':networks_for_region,
'region_id':region_id,
'form': form
}
if request.method == 'POST':
form = NetworkForm(request.POST)
if form.is_valid():
form.save()
return render(request, 'Network_page.html', parametrs)
HTML
{% block script_and_style %}
<link rel="stylesheet" href="/static/css/network_style.css">
<script src="/static/JS/JS_for_network_page.js"></script>
{% endblock %}
{% block content %}
<div id="block">
<button id="addNetwork" name="addNetworkButton">Добавить сеть</button>
</div>
<div id="networkForm">
<form method="post" id="addForm">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Сохранить">
</form>
</div>
{% endblock %}
{% block table_content %}
<!-- <caption>Сети</caption> -->
{% for network in networks_for_region %}
<tr>
<td> <a href={% url 'address' region_id network.id %}> {{ network.network }}</a> </td>
<td>{{ network.description }} </td>
<td><a href={% url 'vlans' region_id %}>{{ network.vlan_reletionship|default_if_none:"---" }}</a></td>
</tr>
{% endfor %}
{% endblock %}
Ответы (1 шт):
измени код таким образом, что бы в html context у тебя попадала актуальная версия формы. В твоем случае ты постоянно в контекст передаешь форму с пустыми значениями полей. Добавь определение parameters после того, как проверишь был ли POST запрос и валидна ли форма
def networking(request, region_id):
networks = Networks.objects.all().order_by('network')
networks_for_region = Networks.objects.filter(region_reletionship=region_id)
form = NetworkForm(request.POST if request.POST else None)
if request.method == 'POST':
if form.is_valid():
form.save()
parametrs = {
'networks':networks,
'networks_for_region':networks_for_region,
'region_id':region_id,
'form': form
}
return render(request, 'Network_page.html', parametrs)
что бы информация об ошибке была рядом с полем у которого возникает ошибка замени строку
raise ValidationError('asdasdasdasd') на self.add_error("network", "asdasdasdasd")