作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的发现 django 表单集令人困惑。
我尤其对以下我不太了解的概念有疑问:
The formset is smart enough to ignore extra forms that were not changed.
making forms in the formsets required.
import django
class MyForm(django.forms.Form):
start = django.forms.DateField()
end = django.forms.DateField()
data = {
'form-TOTAL_FORMS': '1',
'form-MAX_NUM_FORMS': '',
'form-INITIAL_FORMS': '0',
'form-0-start': '',
'form-0-end': '',
}
MyFormSet = formset_factory(MyForm)
formset = MyFormSet(data)
#fee_forms[0].empty_permitted = False
print formset.is_valid()
# --- returns True ---
print formset.errors
f = MyForm({'start': '', 'end': ''})
print f.is_valid()
# --- returns False ---
print f.errors
最佳答案
The formset is smart enough to ignore extra forms that were not changed.
谈论试图过于聪明的代码。这到底是什么意思?我为什么要那样?
这似乎意味着——正如你所计算出的——由表单集创建的“额外”表单(在你的例子中是extra=N
)有empty_permitted
设置为True
. Have a glance atdjango/forms/formsets.py
看到这种情况发生。formset[0].empty_permitted
表示如果formset[0].has_changed() == False
,不进行进一步的处理/验证。再次, you can see this in action informs/forms.py
.
为了防止这种情况 , a blog post suggests定义要在modelformset_factory
中使用的自定义表单集(或inlineformset_factory
)设置empty_permitted = False
:我没有测试过这个,但它看起来是合法的。class MyModelFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(MyModelFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
至于为什么有人可能想要这个,它使用
django-dynamic-formset
更简单——你可以为form-0
发送数据和form-2
并且,假设form-1
是一个额外的形式(即不链接到模型数据),Django 不会提示。如empty_permitted
分别是False
默认情况下,您必须担心在自己的代码中跳过空白表单,或者在 Javascript 中重新索引内容。
关于django 表单集混淆(验证、必需、empty_permitted),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745343/
我真的发现 django 表单集令人困惑。 我尤其对以下我不太了解的概念有疑问: The formset is smart enough to ignore extra forms that were
我是一名优秀的程序员,十分优秀!