在Django forms.ChoiceField上设置选定的值
下面是一个表单中的字段声明:
max_number = forms.ChoiceField(widget = forms.Select(), choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
我想设置初始值为3,这似乎并没有工作。 我曾经玩过这个参数,引用/没有引号等等,但没有改变。
我通过Google发现的一些结果表明,可以设置初始值,但是我从来没有设法使其起作用! 顺便说一句,我在Django 1.0上。
任何人都可以给我一个明确的答案,如果可能的话? 和/或必要的调整在我的代码片段?
非常感谢。
尝试在实例化表单时设置初始值:
form = MyForm(initial={'max_number': '3'})
这并没有涉及到眼前的问题,但是这个Q / A出现在试图将所选值分配给一个ChoiceField
相关search中。
如果你已经在你的Form类中调用了super().__init__
,你应该更新form.initial
字典,而不是field.initial
属性。 如果你学习form.initial
(例如,在调用super().__init__
print self.initial
之后print self.initial
),它将包含所有字段的值。 在那个字典中有一个None
的值会覆盖field.initial
值。
例如
class MyForm(forms.Form): def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) # assign a (computed, I assume) default value to the choice field self.initial['choices_field_name'] = 'default value' # you should NOT do this: self.fields['choices_field_name'].initial = 'default value'
您也可以执行以下操作。 在你的form类中def:
max_number = forms.ChoiceField(widget = forms.Select(), choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
那么当您在视图中调用表单时,您可以dynamic设置初始选项和select列表。
yourFormInstance = YourFormClass() yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)] yourFormInstance.fields['max_number'].initial = [1]
注意:初始值必须是一个列表,select必须是2元组,在我的例子中,我有一个2元组列表。 希望这可以帮助。
我遇到了这个问题,并发现问题出在浏览器中。 刷新浏览器时,将重新填充与之前相同的值,忽略已选中的字段。 如果您查看源代码,则会看到选中的值是正确的。 或者把光标放在浏览器的URL字段中,然后按回车。 这将从头开始重新加载表单。
汤姆和伯顿的答案最终都适用于我,但是我在计算如何将它们应用于ModelChoiceField
遇到了一些麻烦。
唯一的技巧就是选项存储为(<model's ID>, <model's unicode repr>)
,所以如果要设置初始模型select,则将模型的ID作为初始值传递,而不是对象本身或它的名字或其他任何东西。 然后就像这样简单:
form = EmployeeForm(initial={'manager': manager_employee_id})
或者, initial
参数可以被忽略,而不是多余的行:
form.fields['manager'].initial = manager_employee_id
戴夫 – 任何运气find解决scheme的浏览器问题? 有没有办法强制刷新?
至于原始问题,请在初始化表单时尝试以下操作:
def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.base_fields['MyChoiceField'].initial = initial_value
确定我需要看看你是如何渲染表单。 初始值仅用于未绑定的表单,如果已绑定且未包含该字段的值,则不会select任何内容。
试试这个对我有用,我已经在models.py中添加了这个
options = ( ('1','1'), ('2','2'), ('3','3') ) max_number = forms.ChoiceField(max_length = 2, choices = options, default ='3')