【问题标题】:Django Forms - Can't raise validation error in testsDjango Forms - 无法在测试中引发验证错误
【发布时间】:2016-01-26 21:48:51
【问题描述】:

我正在努力让我的测试在 Django 中引发表单验证错误。这是使用标准/默认输入类型。

# forms.py
class NewUserForm(forms.Form):
    first_name = floppyforms.CharField(widget=floppyforms.TextInput(attrs={'class': 'form-control input-lg', 'placeholder': 'First Name'})),
    last_name = floppyforms.CharField(widget=floppyforms.TextInput(attrs={'class': 'form-control input-lg', 'placeholder': 'Last Name'})),
    email = forms.EmailField(),
    mobile = floppyforms.CharField(
        required=False,
        widget=floppyforms.TextInput(attrs={'class': 'form-control input-lg', 'placeholder': 'Mobile number', 'autocomplete': 'false'})),
    postcode = floppyforms.CharField(widget=floppyforms.TextInput(attrs={'class': 'form-control input-lg', 'placeholder': 'Postcode'})),
    super_balance = floppyforms.CharField(widget=floppyforms.RangeInput(attrs={'class': 'bar', 'type': 'range', 'id': 'rangeinput',
                                                                               'value': '492500', 'min': '75000', 'max': '1000000',
                                                                               'step': '5000', }))

# tests.py
class NewUserFormTest(TestCase):
    def setUp(self):
        self.valid_data = {
            'first_name': 'herp',
            'last_name': 'derp',
            'email': 'herp@derp.com',
            'mobile': '0412345678',
            'postcode': '00000',
            'relationship_status': 'S',
            'super_balance': '100000',
            'current_super_provider': '49'
        }

...
    def test_invalid_fields(self):
        form = NewUserForm({})
        self.assertFalse(form.is_valid()) # correct
        data = self.valid_data
        data['email'] = 24234 # this field should fail
        form = NewUserForm(data)
        form.is_valid() # returns True

当我将空白字典传递给初始表单时。 form.errors 显示 {'super_balance': ['This field is required.']}。这更令人困惑,因为文档指出,除非明确声明,否则所有字段都被认为是必需的。

我使用的是 1.8.5

提前干杯

【问题讨论】:

    标签: django django-forms django-testing


    【解决方案1】:

    您需要删除表单中所有字段的尾随逗号。

    代替

    class NewUserForm(forms.Form):
        ...
        email = forms.EmailField(),
        ...
    

    应该是

    class NewUserForm(forms.Form):
        ...
        email = forms.EmailField()
        ...
    

    目前,NewUserForm.email 是一个元组,而不是一个字段,因此数据字典中该字段的任何值都将被忽略。唯一没有尾随逗号的字段是 super_balance,这就是为什么当您将空白字典传递给表单时出现的唯一错误。

    【讨论】:

    • 哇。当我将它从模型表单中更改出来时,我做了一个批处理 grep + replace ,不用说我做得不好。
    猜你喜欢
    • 2021-10-04
    • 2020-10-14
    • 2019-08-15
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-02-04
    相关资源
    最近更新 更多