这是形式的字段声明:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
我想将初始值设置为3,这似乎不起作用。我玩过参数,引号/无引号等,但是没有变化。
如果有可能,谁能给我一个明确的答案?和/或对我的代码段进行必要的调整?
我正在使用Django 1.0
这是形式的字段声明:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
我想将初始值设置为3,这似乎不起作用。我玩过参数,引号/无引号等,但是没有变化。
如果有可能,谁能给我一个明确的答案?和/或对我的代码段进行必要的调整?
我正在使用Django 1.0
Answers:
实例化表单时,请尝试设置初始值:
form = MyForm(initial={'max_number': '3'})
'3'对应于元组的第一个值还是第二个?
这并不涉及眼前的紧迫问题,但此问题会针对与尝试将选定值分配给相关的搜索出现ChoiceField。
如果您已经super().__init__在Form类中调用过,则应该更新form.initial字典,而不是field.initial属性。如果您学习form.initial(例如print self.initial,在调用后super().__init__),它将包含所有字段的值。具有值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'
您还可以执行以下操作。在您的表格类def中:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
然后在视图中调用表单时,您可以动态设置初始选择和选择列表。
yourFormInstance = YourFormClass()
yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)]
yourFormInstance.fields['max_number'].initial = [1]
注意:初始值必须是一个列表,选择必须是2元组,在上面的示例中,我有2元组的列表。希望这可以帮助。
initial指的是要选择的项目的键,而不是其索引。花了我一些尝试来解决这个问题!
汤姆(Tom)和伯顿(Burton)的答案最终都对我有用,但是我很难弄清楚如何将它们应用于a ModelChoiceField。
唯一的窍门是将选择存储为的元组(<model's ID>, <model's unicode repr>),因此,如果要设置初始模型选择,则将模型的ID作为初始值传递,而不是对象本身,名称或其他任何名称。然后就这么简单:
form = EmployeeForm(initial={'manager': manager_employee_id})
另外,initial也可以忽略该参数,以代替带有以下内容的额外行:
form.fields['manager'].initial = manager_employee_id
GET请求后设置表单的初始值并在视图中进行设置,在这种情况下,第二行代码可以完美运行。
Dave-寻找浏览器问题的解决方案有运气吗?有办法强制刷新吗?
至于原始问题,请在初始化表单时尝试以下操作:
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.base_fields['MyChoiceField'].initial = initial_value
Instances should always modify self.fields; they should not modify self.base_fields.
试试这个对我有用,我已经在models.py中添加了它
options = (
('1','1'),
('2','2'),
('3','3')
)
max_number = forms.ChoiceField(max_length = 2, choices = options, default ='3')
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'