在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')