django - 如何修复(字典更新序列元素 #0 的长度为 211;需要 2)错误?
问题描述
我需要在有人注册新帐户时添加错误(如果有)。现在,我第一次尝试通过 ValidationError 引发错误,在我看来它已经触发,但是当我关闭 IDE 并再次打开它时,它向我显示下一个错误:
异常类型:ValueError
异常值:字典更新序列元素 #0 有长度 211; 2 是必需的
我不知道到底发生了什么?以及为什么在我关闭 IDE 之前没有出现该错误?
视图.py
# User registration
class Register(CreateView):
template_name = 'account/register.html'
form_class = SignUp
success_url = reverse_lazy('account:login')
表格.py
# UserCreationForm
class SignUp(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
class Meta:
model = User
fields = ['username',
'first_name',
'last_name',
'password1',
'password2',
'email']
def clean_username(self):
data = self.cleaned_data['username']
if User.objects.filter(username=data).exists():
raise ValidationError('username is already exists')
return data
def clean_email(self):
data = self.cleaned_data['email']
if User.objects.filter(email=data).exists():
raise ValidationError('email is already exists')
return data
注册.html
<form method="post">
{% csrf_token %}
<div class="form-group">
<div class="right-inner-addon">
{% for field in form %}
{% if form.errors %}
{% for error in field.errors %}
<div class="text-danger">
<strong>{{ error }}</strong>
</div>
{% endfor %}
{% endif %}
{{ field }}
{% endfor %}
</div>
</div>
<hr>
<div class="tab-content">
<div class="tab-pane fade in active text-center" id="pp">
<button type="submit" class="btn btn-primary btn-lg btn-block"><i class="fa fa-plus"></i> Create Account</button>
</div>
</div>
</form>
解决方案
{{ form }}不是遍历它的字典列表;它是字典的字典,其中每个键代表字段,每个字段是一个字典,其键称为错误,它将是错误列表。
所以您需要知道将显示的字段的名称,并根据您显示的错误,例如:
<input name="old_password" type="password" class="form-control" id="id_old_password">
{% for error in form.old_password.errors %}
<p style="color:red">{{ error }}</p>
{% endfor %}
请注意:为了使您的字段能够向 CBV 发送请求(如您的情况)并使 CBV 能够毫无问题地处理 POST 和 GET 请求,您需要提供id="id_field name"和name="field name ”。
推荐阅读
- python - Python redis smemebers 总是返回洗牌集
- python - ModuleNotFoundError:没有名为“setuptools._distutils”的模块
- c - Scilab Xcos 块中的 C 语言使用
- cmake - 如何解决此 CMake 竞争条件?
- material-ui - 如何在 helpertext Material UI TextField 中添加 onClick 事件?
- css - 使用 CSS 的等高内部 div
- material-ui - 如何在图片上传中获取原始文件对象
- javascript - 为什么我在 Math.max 中识别 TIE 的代码不起作用?
- git - 如何查看从一个分支到另一个分支的提交
- c++ - 预处理器宏和 std::source_location 之间的区别