测试表单字段小部件类型
Testing Form Field Widget Type
我正在编写 Django 模型表单的测试:
class TemplateFieldTextForm(forms.ModelForm):
class Meta:
model = TemplateFieldText
fields = []
def __init__(self, *args, **kwargs):
super(TemplateFieldTextForm, self).__init__(*args, **kwargs)
field = self.instance.template_field
label = field.label or var_to_proper(field.identifier)
if field.input_type == 'text_area':
self.fields['text'] = forms.CharField(label=label, required=field.required, widget=forms.Textarea)
else:
self.fields['text'] = forms.CharField(label=label, required=field.required)
我正在尝试测试是否为 text
字段设置了正确的小部件,如下所示:
def test_submit_with_char_field(self):
template_field = mommy.make(TemplateField, label='char_field')
template_field_text = mommy.make(TemplateFieldText, template_field=template_field,
award_process=self.award_process)
form_data = {
'text': 'some text'
}
form = TemplateFieldTextForm(form_data, instance=template_field_text)
self.assertEqual(form.fields['text'].widget.__class__.__name__, 'TextInput')
但是,该小部件似乎始终是 Textarea
小部件,而不是默认的 TextInput
。当我检查实际呈现的模板中的表单时,表单确实按预期进行了更改。关于我在测试中出错的地方有什么想法吗?
原来我设置的模型字段值不正确。
template_field = mommy.make(TemplateField, label='char_field')
应该是:
template_field = mommy.make(TemplateField, input_type='char_field')
我正在编写 Django 模型表单的测试:
class TemplateFieldTextForm(forms.ModelForm):
class Meta:
model = TemplateFieldText
fields = []
def __init__(self, *args, **kwargs):
super(TemplateFieldTextForm, self).__init__(*args, **kwargs)
field = self.instance.template_field
label = field.label or var_to_proper(field.identifier)
if field.input_type == 'text_area':
self.fields['text'] = forms.CharField(label=label, required=field.required, widget=forms.Textarea)
else:
self.fields['text'] = forms.CharField(label=label, required=field.required)
我正在尝试测试是否为 text
字段设置了正确的小部件,如下所示:
def test_submit_with_char_field(self):
template_field = mommy.make(TemplateField, label='char_field')
template_field_text = mommy.make(TemplateFieldText, template_field=template_field,
award_process=self.award_process)
form_data = {
'text': 'some text'
}
form = TemplateFieldTextForm(form_data, instance=template_field_text)
self.assertEqual(form.fields['text'].widget.__class__.__name__, 'TextInput')
但是,该小部件似乎始终是 Textarea
小部件,而不是默认的 TextInput
。当我检查实际呈现的模板中的表单时,表单确实按预期进行了更改。关于我在测试中出错的地方有什么想法吗?
原来我设置的模型字段值不正确。
template_field = mommy.make(TemplateField, label='char_field')
应该是:
template_field = mommy.make(TemplateField, input_type='char_field')