Pie*_*NAY 12 python django django-forms
模型:
class Session(models.Model):
tutor = models.ForeignKey(User)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
def __unicode__(self):
return u'%s - %s' % (self.tutor, self.start_time)
Run Code Online (Sandbox Code Playgroud)
形成:
class SessionForm(forms.ModelForm):
class Meta:
model = Session
exclude = ['tutor']
Run Code Online (Sandbox Code Playgroud)
测试:
>>> ses = Session.objects.get(pk=1)
>>> ses
<Session: Robert - 2012-03-22 13:00:00>
>>> form = SessionForm(instance=ses)
>>> form.is_valid()
false
>>> form.errors
{}
Run Code Online (Sandbox Code Playgroud)
怎么了 ?
Dan*_*man 18
您尚未将任何数据传递到表单,因此它无效.实例参数不用于设置表单数据,只用于设置初始数据.
这是为丹尼尔·罗斯曼上面的回答提供一些背景的一个卑微的尝试。
\n正如您在源代码中看到的,BaseForm.is_valid()执行以下操作:
return self.is_bound and not self.errors\nRun Code Online (Sandbox Code Playgroud)\n因此,如果is_valid()返回False,即使没有错误,那么也is_bound一定是False。
现在, 的值已在( sourceis_bound )中分配:BaseForm.__init__()
self.is_bound = data is not None or files is not None\nRun Code Online (Sandbox Code Playgroud)\n从表格文档中:
\n\n\nForm 实例要么绑定到一组数据,要么未绑定。
\n\n
\n- 如果它绑定到一组数据,则它能够验证该数据并将表单呈现为 HTML,并在 HTML 中显示数据。
\n- 如果它\xe2\x80\x99s未绑定,则无法进行验证(因为\xe2\x80\x99s没有数据可供验证!),但它仍然可以将空白表单呈现为HTML。
\n
另请注意,这errors是一个属性,它调用执行实际验证的full_clean()方法(source )。
| 归档时间: |
|
| 查看次数: |
7905 次 |
| 最近记录: |