【问题标题】:how do I fix (dictionary update sequence element #0 has length 211; 2 is required) error?如何修复(字典更新序列元素 #0 的长度为 211;需要 2)错误?
【发布时间】:2020-11-09 23:47:12
【问题描述】:

当有人注册新帐户时,我需要添加错误(如果有)。现在,我第一次尝试通过 ValidationError 引发错误,在我看来它已经触发,但是当我关闭 IDE 并再次打开它时,它会显示下一个错误:
异常类型:ValueError
异常值:字典更新序列元素#0 的长度为 211; 2 是必需的

我不知道到底发生了什么?以及为什么在我关闭 IDE 之前没有出现该错误?

views.py

# User registration
class Register(CreateView):
    template_name = 'account/register.html'
    form_class = SignUp
    success_url = reverse_lazy('account:login')

forms.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>

【问题讨论】:

    标签: django django-forms django-class-based-views django-errors


    【解决方案1】:

    {{ form }} 不是循环遍历它的字典列表;它是字典的字典,其中每个键代表字段,每个字段都是一个字典,其键名为 errors,它将是错误列表。
    因此您需要知道将显示的字段的名称,并根据您显示的错误,例如:

    <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"

    【讨论】:

    • 这里的错误没有因为 Html 而引发,我所做的 HTML 代码运行良好,但是当我停止服务器并再次运行时,服务器向我发送了该错误。另外,如果我确实为服务器运行,服务器将运行良好,至少会返回给我没有任何错误的页面,并且不会执行任何引发的操作,当我尝试发送请求时它返回我该表单无效,但是,我尝试了什么你告诉我的,错误是一样的
    猜你喜欢
    • 2020-12-14
    • 2018-03-20
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2023-04-06
    • 2016-06-30
    相关资源
    最近更新 更多