【问题标题】:django - form has no errors but form.is_valid() doesn't validatedjango - 表单没有错误,但 form.is_valid() 没有验证
【发布时间】:2011-07-27 20:23:57
【问题描述】:

我有一个表单,由于某种原因它不会引发任何错误(如果用户在文本字段中添加数据),但 form.is_valid() 不会验证。有什么想法吗?

forms.py:

class MyForm(forms.Form):
    title = forms.CharField(widget=forms.TextInput(attrs={'class':'titleField')) 

我的模板.html

  <form action="" method="post" name="form">{% csrf_token %}
  {{ form.title.errors }}
  {{ form.title }}
  <input type="submit" name='submit_button' value="Post" />
  </form>

views.py:

      if 'submit_button' in request.POST:
            form = MyForm(request.POST)
            if form.is_valid():
               cd = form.cleaned_data 
               title = cd['title']
               g = MyData(title='title')   
               g.save()

       else:
            form = MyForm() 

【问题讨论】:

    标签: django django-templates django-forms django-views


    【解决方案1】:

    从您的模板中,添加以下内容:

    {{ form.errors }}
    {{ form.non_field_errors }}
    

    您是否发现上述任何错误?

    【讨论】:

    • {{ form.errors }} {{ form.non_field_errors }} 对我来说没有显示任何错误:(但它仍然没有更新。表单是绑定的,实例也传递给表单
    • 如果以上两个都不起作用,那么您没有将 GET 或 POST 参数传递给表单,因此它没有获取任何数据并且没有验证。确保您正在调用的表单已从请求中传递了 GET 或 POST。
    • 我遇到了同样的问题,最后我将它追踪到了一个布尔字段,我错误地设置为 forms.ChoicesField 而不是 forms.BooleanField 在 forms.py 中。因此,请确保您的所有字段类型都是正确的,因为对我来说,错误是无声的。
    • 当我继承一个 AuthenticationForm 时,我试图覆盖一些小部件属性,但是在构造函数中,在执行 super().__init__(self, *args, **kwargs) 时我忘记传递 self 因此我是看不到任何错误。修复此问题后,我能够看到错误。 所以请检查您的 forms.py 文件是否有任何愚蠢的错误
    【解决方案2】:

    您也可以在后端打印(或记录)错误,同样使用:

    喜欢,打印错误:

    print(form.errors)
    

    【讨论】:

    • 安装 Sentry 或类似设备时并非总是可行
    【解决方案3】:

    我正在使用这个带有引导程序的块

    {% if form.errors %}
    <div class="alert alert-danger" role="alert">
        {% for field, errors in form.errors.items %}
        {% for error in errors %}
        <b>{{ field }}</b>: {{ error }}
        {% endfor %}
        {% endfor %}
    </div>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2021-09-01
      • 2015-09-04
      • 2021-08-15
      相关资源
      最近更新 更多