Django异常值:'TextInput'对象没有属性'clean'

时间:2013-12-11 11:20:03

标签: django custom-fields django-custom-field

我遇到了Django 1.6的以下问题。

我尝试创建自定义MultiValueField并在提交表单时捕获错误。 " django / forms / fields.py中的错误出现在干净的993行和#34中:

clean_data.append(field.clean(field_value))

Local vars:
field   <django.forms.widgets.TextInput object at 0x105f608d0>
field_value     u'+7'

似乎django试图调用django.forms.widgets.TextInput

中不存在的干净方法

所以我有一个问题 - 是我做错了,还是django bug?

我的自定义字段代码:

from django import forms


class PhoneWidget(forms.MultiWidget):
    def __init__(self, attrs=None):
        _widgets = (
            forms.HiddenInput(attrs={'value': '+7'}),
            forms.TextInput(attrs={'class': 'form-control'}),
        )
        super(PhoneWidget, self).__init__(_widgets, attrs)

    def decompress(self, value):
        if value:
            return value
        return [None, None]

    def format_output(self, rendered_widgets):
        from django.template.loader import render_to_string
        return render_to_string('parts/phone.html', {
                'phone_code': rendered_widgets[0],
                'phone_number': rendered_widgets[1]
            })


class PhoneField(forms.MultiValueField):
    widget = PhoneWidget()

    def __init__(self, required=False):
        phone_code = forms.TextInput()
        phone_number = forms.TextInput()
        super(PhoneField, self).__init__(required=required, fields=(phone_code, phone_number))

    def compress(self, data_list):
        return data_list

表格代码:

class OfficeForm(ModelForm):
    phone = custom_fields.PhoneField()

    class Meta:
        model = Office
        exclude = ['user']
        error_messages = {
            'name': {
                'required': "This is a required field",
            },
        }

    def clean_phone(self):
        data = self.cleaned_data['phone']
        return data

问题已经结束。

问题在于我将自定义字段声明为小部件...

phone_code = forms.TextInput()
phone_number = forms.TextInput()

必须是

phone_code = forms.CharField()
phone_number = forms.CharField()

0 个答案:

没有答案