首页 > 解决方案 > 如何修复(字典更新序列元素 #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>

标签: djangodjango-formsdjango-class-based-viewsdjango-errors

解决方案


{{ 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 ”


推荐阅读