django - 这是 Django 表单集验证中的错误吗?

标签 django django-forms validation formset

手册示例: http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation (我使用 Django 1.0.3 在 Google App Engine 上运行)

代码:

from django import forms
from django.forms.formsets import formset_factory

class ArticleForm1(forms.Form):
  title = forms.CharField()
  pub_date = forms.DateField()

class ArticleForm2(forms.Form):
  title = forms.CharField()

class ArticleForm3(forms.Form):
  title = forms.CharField()
  pub_date = forms.CharField()

ArticleFormSet1 = formset_factory(ArticleForm1)
ArticleFormSet2 = formset_factory(ArticleForm2)
ArticleFormSet3 = formset_factory(ArticleForm3)

data = {
 'form-TOTAL_FORMS': u'2',
 'form-INITIAL_FORMS': u'0',
 'form-0-title': u'',
 'form-0-pub_date': u'16 June 1904',
 'form-1-title': u'',                # <-- this title is missing but required
 'form-1-pub_date': u'16 June 1904', # <-- this date is missing but required
}

formset = ArticleFormSet1(data)
print "Should be False: %s" % formset.is_valid()

formset = ArticleFormSet2(data)
print "Should be False: %s" % formset.is_valid()

formset = ArticleFormSet3(data)
print "Should be False: %s" % formset.is_valid()

输出:
$ .../ActiveStatePython2.5/python.exe formset_bug.py
Should be False: False
Should be False: True
Should be False: False

ActiveState Python 2.5.4.4,Django 1.0.3 最终版。

它看起来好像在只有一个 CharField 的情况下没有验证(但是 2 CharFields 或一个 CharField 和一个 DateField 有效)。

我在谷歌上搜索了这样的错误,但找不到任何东西。我还没有尝试过 Django 1.1,但现在在 GAE 上使用 1.0 要容易得多。

最佳答案

好的,我现在对 Django 有了更多的了解。这不是一个错误。

来自 http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation :

“表单集足够智能,可以忽略未更改的额外表单。”

来自 Django Formset.is_valid() failing for extra forms :

“表单集将 empty_permitted=True 传递给所有“额外”表单,并且带有 empty_permitted 且尚未修改的表单应始终通过验证。”

当我将 form-TOTAL_FORMS 设置为 u'2' 时,它不再有任何额外内容,并且验证符合我的预期。

当有第二个字段的一部分(作为 DateField 或 CharField)时,该字段有一些东西,不再是多余的。

关于django - 这是 Django 表单集验证中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308150/

相关文章:

python - 一起计算注释字段

django - 用于 Django 的 mongodb

javascript - Django Admin - RelatedObjectLookups - 它如何刷新并在父窗口上设置选择?

asp.net-mvc - 使用数据注释验证ASP.NET MVC 2中的SelectList

validation - 在不覆盖核心 js 文件的情况下扩展 Magento 2 rules.js?

python - 这种Django多设置文件的做法合理吗?

python - 为什么 Django 不允许使用上下文重定向

django - django-表单没有错误,但是form.is_valid()不验证

python - 在 Django 中保存 ModelForm 后获取主键

java - 在 Java 中 HV000030 : No validator could be found for constraint 'javax.validation.constraints.Email'