Field.clean(value)[source]

虽然表单字段的Field类主要使用在Form类中,但也可以直接实例化它们来使用,以便更好地了解它们是如何工作的。每个Field的实例都有一个clean()方法,它接受一个参数,然后返回“清洁的”数据或者抛出一个django.forms.ValidationError异常:

>>> from django import forms
>>> f = forms.EmailField() >>> f.clean('foo@example.com') 'foo@example.com' >>> f.clean('invalid email address') Traceback (most recent call last): ... ValidationError: ['Enter a valid email address.'] 

这个clean方法经常被我们用来在开发或测试过程中对数据进行验证和测试。

一、核心字段参数

以下的参数是每个Field类都可以使用的。

1. required

给字段添加必填属性,不能空着。

>>> from django import forms
>>> f = forms.CharField() >>> f.clean('foo') 'foo' >>> f.clean('') Traceback (most recent call last): ... ValidationError: ['This field is required.'] >>> f.clean(None) Traceback (most recent call last): ... ValidationError: ['This field is required.'] >>> f.clean(' ') ' ' >>> f.clean(0) '0' >>> f.clean(True) 'True' >>> f.clean(False) 'False' 

若要表示一个字段不是必需的,设置required=False:

>>> f = forms.CharField(required=False)
>>> f.clean('foo')
'foo'
>>> f.clean('')
''
>>> f.clean(None)
''
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'

2. label

label参数用来给字段添加‘人类友好’的提示信息。如果没有设置这个参数,那么就用字段的首字母大写名字。比如:

下面的例子,前两个字段有,最后的comment没有label参数:

>>> from django import forms
>>> class CommentForm(forms.Form): ... name = forms.CharField(label='Your name') ... url = forms.URLField(label='Your website', required=False) ... comment = forms.CharField() >>> f = CommentForm(auto_id=False) >>> print(f) <tr><th>Your name:</th><td><input type="text" name="name" required /></td></tr> <tr><th>Your website:</th><td><input type="url" name="url" /></td></tr> <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> 

3. label_suffix

Django默认为上面的label参数后面加个冒号后缀,如果想自定义,可以使用label_suffix参数。比如下面的例子用“?”代替了冒号:

>>> class ContactForm(forms.Form):
...     age = forms.IntegerField()
...     nationality = forms.CharField()
...     captcha_answer = forms.IntegerField(label='2 + 2', label_suffix=' =')
>>> f = ContactForm(label_suffix='?')
>>> print(f.as_p())
<p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required /></p> <p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required /></p> <p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required /></p> 

4. initial

为HTML页面中表单元素定义初始值。也就是input元素的value参数的值,如下所示:

>>> from django import forms
>>> class CommentForm(forms.Form): ... name = forms.CharField(initial='Your name') ... url = forms.URLField(initial='http://') ... comment = forms.CharField() >>> f = CommentForm(auto_id=False) >>> print(f) <tr><th>Name:</th><td><input type="text" name="name" value="Your name" required /></td></tr> <tr><th>Url:</th><td><input type="url" name="url" value="http://" required /></td></tr> <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> 

你可能会问为什么不在渲染表单的时候传递一个包含初始化值的字典给它,不是更方便?因为如果这么做,你将触发表单的验证过程,此时输出的HTML页面将包含验证中产生的错误,如下所示:

>>> class CommentForm(forms.Form):
...     name = forms.CharField()
...     url = forms.URLField()
...     comment = forms.CharField()
>>> default_data = {'name': 'Your name', 'url': 'http://'}
>>> f = CommentForm(default_data, auto_id=False)
>>> print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" required /></td></tr> <tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required /></td></tr> <tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required /></td></tr> 

这就是为什么initial参数只用在未绑定的表单上。

还要注意,如果提交表单时某个字段的值没有填写,initial的值不会作为“默认”的数据。initial值只用于原始表单的显示:

>>> class CommentForm(forms.Form):
...     name = forms.CharField(initial='Your name')
...     url = forms.URLField(initial='http://')
...     comment = forms.CharField()
>>> data = {'name': '', 'url': '', 'comment': 'Foo'}
>>> f = CommentForm(data)
>>> f.is_valid()
False
# The form does *not* fall back to using the initial values.
>>> f.errors
{'url': ['This field is required.'], 'name': ['This field is required.']}

除了常量之外,你还可以传递一个可调用的对象:

>>> import datetime
>>> class DateForm(forms.Form): ... day = forms.DateField(initial=datetime.date.today) >>> print(DateForm()) <tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" required /><td></tr> 

5. widget

最重要的参数之一,指定渲染Widget时使用的widget类,也就是这个form字段在HTML页面中是显示为文本输入框?密码输入框?单选按钮?多选框?还是别的....

6. help_text

该参数用于设置字段的辅助描述文本。

>>> from django import forms
>>> class HelpTextContactForm(forms.Form): ... subject = forms.CharField(max_length=100, help_text='100 characters max.') ... message = forms.CharField() ... sender = forms.EmailField(help_text='A valid email address, please.') ... cc_myself = forms.BooleanField(required=False) >>> f = HelpTextContactForm(auto_id=False) >>> print(f.as_table()) <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required /><br /><span class="helptext">100 characters max.</span></td></tr> <tr><th>Message:</th><td><input type="text" name="message" required /></td></tr> <tr><th>Sender:</th><td><input type="email" name="sender" required /><br />A valid email address, please.</td></tr> <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr> >>> print(f.as_ul())) <li>Subject: <input type="text" name="subject" maxlength="100" required /> <span class="helptext">100 characters max.</span></li> <li>Message: <input 

转载于:https://www.cnblogs.com/navysummer/p/10200236.html

Django表单字段汇总相关推荐

  1. php表单的输出,php – Joomla输入表单字段输出

    我想做的就是给joomla输入表单提供基本的bootstrap样式: some text 我使用带有less的mixin将样式应用于现有的输入类 //input form fields .valida ...

  2. react 统一字段验证_如何使用React的受控输入进行即时表单字段验证

    react 统一字段验证 by Gosha Arinich 通过Gosha Arinich 如何使用React的受控输入进行即时表单字段验证 (How to use React's controlle ...

  3. html表单文本框怎么输出函数值,如何获取用户输入的html文本表单字段传递给javascript函数的值?...

    我想通过生成用户必须输入到文本输入表单字段的随机数创建我自己的反垃圾邮件过滤器,如果它是正确的,他们进入下一页,如果不是,则显示错误数字输入不正确.如何获取用户输入的html文本表单字段传递给java ...

  4. adobe reader java_使用PDF框设置的表单字段值在Adobe Reader中不可见

    尝试使用Apache PDFBOX(1.8.5)从字段中设置一些问题我遇到了问题 . 我有几个不同的静态PDF用于测试 . 使用以下代码,我可以设置表单字段的值,并保存生成的PDF . 然后,我可以在 ...

  5. mysql修改表字段小数点精度,mysql – 如何配置Rails以在表单字段中以正确的精度输出小数?...

    我想在我的(sqlite和mysql)数据库中存储货币.我正在尝试使用十进制列类型,其中:scale => 2. 这不符合预期.如果我保存记录:rate => 10.50,它作为10.5存 ...

  6. 如何禁用Web表单字段/输入标签上的浏览器自动完成功能?

    如何在主要浏览器中为特定input (或form field )禁用autocomplete ? #1楼 您可以在输入中使用. 例如; <input type=text name="t ...

  7. 字段校验 css样式_CSS伪类:根据输入的表单字段样式

    字段校验 css样式 The following is an extract from our book, CSS Master, written by Tiffany B. Brown. Copie ...

  8. 表单字段三维数组名_【技术汇】回转式空气预热器温度场三维数值模拟

    电力行业节能环保公众服务平台--权威.专业.创新的电力节能环保公众号 全文3672字 阅读约需3.5分钟 作者 | 闫顺林  曹保鑫 华北电力大学能源动力与机械工程学院 [摘 要]烟气经选择性催化还原 ...

  9. div.php织梦自定义表判断不能为空,织梦自定义表单字段为必填项的教程

    织梦自定义表单用的最多的就是制作留言板,报名等功能,但是添加的字段不填写就能提交,容易被恶意提交,为了防止这些,我们可以把这些字段选项设定为必填项. 方法如下: 1. 用php验证 在plus/diy ...

最新文章

  1. 如何获取HTML元素对应JavaScript对象?
  2. Java IO 性能优化大PK,什么场景用啥,都给你总结好啦!
  3. 基于SAP的中国式数据分析浅谈
  4. oracle主键自动增长
  5. 使用conda安装pydot及其遇到的问题解决方案
  6. V 神呼吁宽大处理,以太坊开发者 Virgil Griffith 被判入狱 63 个月
  7. mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换
  8. 6.苹果官方鼠标移动速度慢问题解决(Magic Mouse)
  9. React:网络工具库
  10. 人眼分辨 PPI_1080P=2K,分辨率≠清晰度?关于显示器大多数人都错了
  11. 导航网/广告位/导航分类/可运营
  12. IDEA2019安装及PJ
  13. DAVE笔记--Micrium uc-Probo DashBoard调试
  14. 如何使用 IFTTT 零成本建立网站内容监控系统?
  15. FlashFXP5.4
  16. 虚拟服务器lan网段地址,lan侧服务器ip地址
  17. 持续更新,mysql的复习强化路
  18. 华硕飞行堡垒56789原厂Windows10系统
  19. Unity3D关于ComputeShader
  20. packet tracer配置ssh、telnet

热门文章

  1. mysql 优化关键字_Mysql之Explain关键字及常见的优化手段
  2. 计算机wps如何排序,wps怎么排序【解答方案】
  3. oracle登录页面错误,php和oracle的页面登录问题
  4. ubuntu查看安装软件的版本
  5. DE21 Convolution Formula
  6. 3DShader之阴影贴图(Shadow Mapping)
  7. Inception-Resnet结构(code)
  8. python set 原理_Python基础教程之dict和set
  9. linux怎么查看服务器主频,Linux环境下查看服务器硬件信息
  10. vector和string