注意:这个答案非常全面,重点关注静态和动态初始值,因为这个问答涉及与动态改变初始值相关的搜索,我相信下面的信息对初级程序员很有用。
如何设置初始值
有 多种方法可以设置 (或任何其他字段,例如 ChoiceField
的 DecimalField
。各种选项可以是
-
静态 (即初始值不变),
-
表单动态 (即可以在表单构造函数中计算/更改初始值
forms.py
),
-
视图动态 (即可以在中计算/改变初始值
view.py
)。
下面介绍的所有选项 都可以组合 ,但要注意 初始值的优先级 !
选项 A - 类中定义的静态初始值
您可以在表单类的字段定义中设置初始值。此选项仅为静态的。
在 forms.py
:
class MyForm(forms.Form):
max_number = forms.ChoiceField(initial='3')
选项 B - 在实例构造函数中定义初始值
您可以在创建表单实例时设置初始值。此选项可以是静态的,也可以是表单动态的。
在 forms.py
:
class MyForm(forms.Form):
max_number = forms.ChoiceField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.initial['max_number'] = '3'
您也可以使用 self.fields['max_number'].initial = '3'
, self.initial['max_number'] = '3'
不建议 这样做, 除非您希望 初始值可以被覆盖 .
选项 C - 表单调用中的初始值
您可以在表单调用的参数中设置初始值。此选项可以是静态的,也可以是视图动态的。
在 views.py
:
my_form = MyForm(initial={'max_number': '3'})
选项 D - 使用关键字参数的初始值
You can also send the initial value as a keyword argument (kwarg) to the form constructor, and then use this kwarg as the initial value. This option can be static, form-dynamic or view-dynamic.
在 views.py
:
my_form = MyForm(my_init_kwarg=3)
在 forms.py
:
class MyForm(forms.Form):
max_number = forms.ChoiceField()
def __init__(self, *args, **kwargs):
if 'my_init_kwarg' in kwargs:
init_val = kwargs.pop('my_init_kwarg')
else:
init_val = 1 # fallback value if kwarg is not provided
super().__init__(*args, **kwargs)
self.initial['max_number'] = init_val
注意:第 4 至 7 行可以简化为 init_val = kwargs.pop('my_init_kwarg', 1)
选项 E - 创建绑定表格
You can create the form as a bound form and pass the initial value as the data for the bound form. This option can be static or view-dynamic.
在 views.py
:
form_data = {'max_number':3}
my_form = MyForm(form_data)
在 forms.py
:
class MyForm(forms.Form):
max_number = forms.ChoiceField()
有关绑定和非绑定表单的更多信息,请参阅 Django 文档 .
ChoiceFields 的附加说明
请注意, 要选择的项的 键 此答案 。因此,如果您有此选择列表
choices = ([('3','three'), ('2','two'), ('1','one')])
并希望将其设置 one
为初始值,您可以使用
max_number = forms.ChoiceField(initial='1')