我有一张表格:
class ConfigNotifyForm(forms.Form):
sensor_name = forms.ChoiceField(widget=forms.Select(),
label="Sensor",
choices=[],
required=True)
value_min = forms.FloatField(label="Value Min", required=True)
value_max = forms.FloatField(label="Value Max", required=True)
def __init__(self, *args, **kwargs):
super(ConfigNotifyForm, self).__init__(*args, **kwargs)
# Get 'initial' argument if any
initial_arguments = kwargs.get('initial', None)
sensor_choices = ''
if initial_arguments != None:
#for choice in initial_arguments.get('src_choices'):
sensor_choices = tuple(initial_arguments.get('src_choices'))
self.fields['sensor_name'].choices = sensor_choices
它可以正常使用模板。但是在提交时,sensor_name不在除了value_min和value_max之外的cleandata中。所以,它没有传递form.is_valid。
但是,如果我像这样编码 init :
def __init__(self, *args, **kwargs):
super(ConfigNotifyForm, self).__init__(*args, **kwargs)
sensor_choices = (
('', 'Select'),
('a0', 'Ndo'),
('a1', 'pH'),
('a2', 'DO'))
self.fields['sensor_name'].choices = sensor_choices
没关系。表格有效。我不知道为什么。任何人都可以帮我解释和解决这个问题吗?感谢
答案 0 :(得分:0)
问题在于,您在表单ConfigNotifyForm
中提到sensor_name
为required=True
。这意味着这个领域不可能是什么。您必须向其传递值才能使表单有效。当您在__init__
中对选项进行硬编码时,该字段不再是空/无效,因此它变为有效。