form.errors显示<ul class="errorlist"><li>res_id<ul class="errorlist"><li>这个字段是必填项。</li></ul></li></ul>,但是print(form.res_id)又可以输出正确的值430111123412348900,这是为什么?明明有值却显示未填写,如何解决?
时间: 2023-12-04 18:02:42 浏览: 147
这种情况可能是表单验证器在验证时出现了问题。您可以检查一下表单验证器的代码是否正确,并且确保它能够正确地解析表单数据。
另外,您可以尝试在模板中手动渲染表单字段,以确保它们正确地显示在页面上。例如:{{ form.res_id }}。
如果这些方法都无法解决问题,您可能需要检查一下数据库中的数据是否正确,并且确保它们能够正确地与表单数据匹配。
相关问题
{% if form.username.errors %} <ul> {% for error in form.uesrname.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} {% if form.email.errors %} <ul> {% for error in form.email.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} {% if form.password.errors %} <ul> {% for error in form.password.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} {% if form.confirm_password.errors %} <ul> {% for error in form.confirm_password.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} 代码优化
可以将重复的代码段优化为一个函数来处理错误信息的显示。你可以将以下代码添加到你的视图函数中:
def get_error_messages(form):
error_messages = []
for field, errors in form.errors.items():
for error in errors:
error_messages.append(f"<li>{error}</li>")
return "".join(error_messages)
然后,你可以在模板中使用这个函数来显示错误信息:
{% if form.errors %}
<ul>
{{ get_error_messages(form) }}
</ul>
{% endif %}
这样,你就可以避免重复的代码块,并且代码更加简洁和可维护。
<form method="post"> {% csrf_token %} {{if not username: raise forms.ValidationError('该用户名不存在!') if not password or not check_password: raise forms.ValidationError('缺少密码!') if password != check_password: raise forms.ValidationError('两次密码不一致') 前端怎么显示消息, form.as_p }} <button type="submit">提交</button></form>{% if form.errors %}<div class="alert alert-danger"> <ul> {% for field in form %} {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} {% endfor %} {{ form.non_field_errors }} </ul></div>{% endif %}
这段代码存在语法错误,不应该把表单验证代码放在模板中。表单验证应该在后端的视图函数中进行,只有在验证失败时再将错误信息传递给前端模板进行渲染。下面是一个示例视图函数代码,用于在后端进行表单验证:
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(label='用户名', max_length=30)
password = forms.CharField(label='密码', widget=forms.PasswordInput)
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
form.add_error(None, '用户名或密码错误')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
在这个示例中,LoginForm
是一个继承自forms.Form
的表单类,用于定义表单中的字段以及验证规则。login_view
是一个视图函数,用于处理用户登录请求。当用户提交表单时,后端会先对表单进行验证,如果表单验证失败,则会在表单中添加错误信息,然后再将表单传递给模板进行渲染。如果表单验证通过,则会使用authenticate()
函数进行身份验证,如果验证成功则登录用户并重定向到主页,否则会在表单中添加错误信息并重新渲染模板。在模板中,可以使用与前面示例相同的方式来显示表单验证错误信息。
相关推荐

















