【问题标题】:Displaying validation error instead of default text errors in Django UserCreationForm在 Django UserCreationForm 中显示验证错误而不是默认文本错误
【发布时间】:2021-08-23 07:36:16
【问题描述】:

我的网站上有一个非常简单的注册表单。我的表单可以工作,但是如果用户名已经存在或者我的 2 个密码字段不匹配,则在我提交表单后,Django 不会做任何事情,只会关注错误的字段。

Forms.py

class CreateUserForm(UserCreationForm):
  username = forms.CharField(required=True, max_length=30) 
  email = forms.EmailField(required=True)
  first_name = forms.CharField(required=True, max_length=50)
  last_name = forms.CharField(required=True, max_length=50)
  
  class Meta:
    model = User
    fields = ['username', 'email', 'first_name', 'last_name', 'password1', 'password2',]
    

如果有人需要更多详细信息,请随时告诉我。感谢所有提供帮助的人!

【问题讨论】:

    标签: python html css django


    【解决方案1】:

    终于弄明白了。基本上,您需要在 forms.py 文件中创建一个函数并查询默认的 Django SQL 数据库,以查看用户名是否已存在。对于和我有同样问题的人,我的代码在下面。


    def clean(self):
              cleaned_data=super().clean()
              if User.objects.filter(username=cleaned_data["username"]).exists():
                raise ValidationError("The username is taken, please try another one")
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您可以在模板中显示表单中的错误。像这样的:

      {% if form.errors %}
          {% for field in form %}
              {% for error in field.errors %}
                  {{ error|escape }}
              {% endfor %}
          {% endfor %}
          {% for error in form.non_field_errors %}
              {{ error|escape }}
          {% endfor %}
      {% endif %}
      
      

      详细文档:https://docs.djangoproject.com/en/3.2/ref/forms/api/#django.forms.Form.errors

      【讨论】:

      • 谢谢!让我试试看。
      • 感谢您的帮助,但您的回答并未将错误显示为验证错误,而是输出文本。这就是我想要的样子:docs.google.com/document/d/…
      • @boetis 您在该文档中显示的验证不是由 Django 完成的,而是由 您的浏览器本身完成的。如果你想做这样的事情,你需要使用 JavaScript。
      • 我不太擅长 Javascript。你有例子可以给我看吗?
      • 您想在发送表单之前得到错误信息吗?可以用js实现。
      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 2020-12-09
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多