Django Form Api

unsplash


Form.is_bound

检查某个form是否关联了数据。

1
2
3
4
5
6
>>> f = ContactForm()
>>> f.is_bound
False
>>> f = ContactForm({'subject': 'hello'})
>>> f.is_bound
True

即使传入空字典,也会bound:

1
2
3
>>> f = ContactForm({})
>>> f.is_bound
True

此外:

  • 若已bound:form可以validating和rendering
  • 如果unbound:form不可validation,但任可以rendering
  • Form instance应当视为immutable

Form.clean()

参考 Cleaning and validating fields that depend on each other


Form.is_valid()

Form对象的一个重要用途就是检查数据是否准备。对bound的Form对象,可以使用is_valid()方法去判定数据是否有效。


Form.errors

1
2
>>> f.errors
{'sender': ['Enter a valid email address.'], 'subject': ['This field is required.']}
  • 即使没有先使用is_valid()方法,也可以访问errors
  • form的数据在访问errors属性或调用is_valid()方法时,都会被验证。
  • fomr的validation仅会被调用一次。

Fomr.errors.as_data()

1
2
3
>>> f.errors.as_data()
{'sender': [ValidationError(['Enter a valid email address.'])],
'subject': [ValidationError(['This field is required

同理还有as_json()依赖于as_data()

Form.errors.as_json(escape_html=False)

1
2
3
>>> f.errors.as_json()
{"sender": [{"message": "Enter a valid email address.", "code": "invalid"}],
"subject": [{"message": "This field is required.", "code": "required"}]}

Form.errors.get_json_data(escape_html=False)

Returns the errors as a dictionary suitable for serializing to JSON. Form.errors.as_json() returns serialized JSON, while this returns the error data before it’s serialized.

Form.add_error(field, error)

  • Form.clean()里面或外面,为特定的field添加错误信息
  • field是要被添加错误信息的域的名字,如果没有填写,则会存进Form.non_field_errors()
  • error通常是一个字符串,或者最好是ValidationError,参见 Raising ValidationError 获取最佳实践
  • Note that Form.add_error() automatically removes the relevant field from cleaned_data. (这句话什么意思)

Form.has_error(field, code=None)

This method returns a boolean designating whether a field has an error with a specific error code. If code is None, it will return True if the field contains any errors at all.

To check for non-field errors use NON_FIELD_ERRORS as the field parameter.


Form.non_field_errors()

返回Form.errors里没有跟任何field关联的错误,包括Form.clean()里raise的错误和,Form.add_error(None, "...")添加的错误。


unbound form的行为

1
2
3
4
5
>>> f = ContactForm()
>>> f.is_valid()
False
>>> f.errors
{}

参考链接

0%