#python #django #validation #display #validationerror
#python #django #проверка #отобразить #ошибка проверки
Вопрос:
У меня проблема с ошибкой в кодировании django, не отображающей ошибку проверки Я не знаю, почему django не отображает validationerror. Не могли бы вы, пожалуйста, помочь.
Вот мой form.py файл это мой файл формы, где у меня есть форма и проверка.
django import forms
from django.core import validators
from new_app.models import Names``
from django.shortcuts import render
from django.http import HttpResponse
class Forms(forms.ModelForm):
FirstName = forms.CharField(label='FirstName',widget=forms.TextInput(attrs={"placeholder":"your Name","rows":20,"column":100}))
class Meta():
model = Names
fields = '__all__'
def clean(self):
all_data = super().clean()
firstname= all_data['FirstName']
lastname = all_data['LastName']
a = 1
if firstname in lastname:
raise forms.ValidationError("amazing")
return all_data
Вот мой view.py файл
это мой файл просмотра
from django.shortcuts import render
from new_app.models import Names
from new_app import formss
from django import forms
# Create your views here.
def index(request):
a = Names.objects.all()
dict = {'write':a}
return render(request , 'index.html', context = dict)
регистр def (запрос):
second = formss.Forms()
if request.method == 'POST':
form = formss.Forms(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
second = formss.Forms()
return render (request , 'forms.html', context = {'form':second} )
Вот мой form.html файл шаблона …
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<title>Login or Sign up</title>
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1> Sign up</h1>
</div>
</div>
<div class="container">
<div class="first">
<form class="form-horizontal" method="post">
{{form.as_p}}
{% csrf_token%}
<input type="submit" class="btn btn-primary" value="Submit">
</form>
</div>
</div>
</body>
</html>
Ответ №1:
Вам нужно добавить теги ошибок в шаблон, чтобы увидеть ошибки проверки:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error }}</strong>
</div>
{% endfor %}
{% endif %}
Вам также необходимо убедиться, что отображается исходная заполненная форма, чтобы отобразить ошибки.
def register(request):
if request.method == 'GET':
form = formss.Forms()
if request.method == 'POST':
form = formss.Forms(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
return render (request , 'forms.html', context = {'form':form} )
Комментарии:
1. Большое вам спасибо …. Так я могу получить ошибку из файла формы напрямую в html?
2. Когда вы загружаете форму в шаблон, она проверяет наличие
errors
атрибутов в шаблоне, и если они у нее есть, она их загрузит.form.is_valid()
Будет генерировать ошибки, если он не проходит проверку. Когда вы загружаете форму обратно в шаблон в post, в случае сбоя она отобразит ошибки вместе с ней.3. Я получаю множественную ошибку, одну из bootsrap, а другую из простой ошибки проверки django? как получить bootsrap только один раз. И как конкретно получать ошибки. Например, если я хочу показать конкретную ошибку для определенного поля и для определенного типа ошибки
4. ценю ваш ответ, но мне немного сложно понять рабочий процесс. Я не понимаю, из-за чего возникают ошибки form.py проверка или из views.py где есть form.is_valid(). как это собирается в шаблон
5. Да, когда вы запустите метод
is_valid()
, он выполнит проверку проверки и создаст атрибут errors формы. Затем это можно увидеть в вашем шаблоне.