Django - 表格无效但没有错误

时间:2012-03-28 14:22:09

标签: 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)

形式:

class SessionForm(forms.ModelForm):
    class Meta:
        model = Session
        exclude = ['tutor']

测试:

>>> 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
{}

怎么了?

2 个答案:

答案 0 :(得分:17)

您尚未将任何数据传递给表单,因此无效。实例参数不用于设置表单数据,只用于设置初始数据。

答案 1 :(得分:0)

这是为Daniel Roseman's answer above提供一些背景的谦虚尝试。

source中可以看到,BaseForm.is_valid()执行以下操作:

return self.is_bound and not self.errors

因此,如果is_valid()返回False,即使没有错误,is_bound也必须是False

现在,is_bound的值已在BaseForm.__init__()source)中分配:

self.is_bound = data is not None or files is not None

来自forms documentation

Form实例绑定到一组数据,或者未绑定。

  • 如果它绑定到一组数据,则可以验证该数据并将表单显示为HTML,并在HTML中显示数据。
  • 如果未绑定,它将无法进行验证(因为没有要验证的数据!),但仍可以将空白表单呈现为HTML。

还要注意,errors是一个属性,它调用full_clean()方法(source),该方法进行实际的验证。