当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django Field.initial用法及代码示例


本文介绍 django.forms.Field.initial 的用法。

声明

Field.initial

initial 参数允许您指定在未绑定的 Form 中呈现此 Field 时要使用的初始值。

要指定动态初始数据,请参阅 Form.initial 参数。

用例是当您想要显示一个“empty” 表单时,其中一个字段被初始化为一个特定的值。例如:

>>> 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 值仅显示未绑定表单的原因。对于绑定表单,HTML 输出将使用绑定数据。

另请注意,如果未给出特定字段的值,initial 值是在验证中用作 “fallback” 数据的 notinitial 值是 only 用于初始表单显示:

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

只有在显示未绑定的表单时才会评估可调用对象,而不是在定义时评估。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.forms.Field.initial。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。