【问题标题】:Testing Form Field Widget Type测试表单字段小部件类型
【发布时间】:2018-11-11 13:53:57
【问题描述】:

我正在以 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。当我在实际呈现的模板中检查表单时,表单确实按预期发生了变化。关于我在测试中哪里出错的任何想法?

【问题讨论】:

  • 您似乎没有在测试中的任何地方设置 input_type 'text_area'。
  • 你是对的!我正在设置label='char_field' 而不是input_type='char_field。谢谢!

标签: django django-forms django-testing django-widget


【解决方案1】:

原来我设置的模型字段值不正确。

template_field = mommy.make(TemplateField, label='char_field')

应该是:

template_field = mommy.make(TemplateField, input_type='char_field')

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 2015-10-06
    • 2021-10-14
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多