Значение исключения Django: объект "TextInput" не имеет атрибута "clean"
Я встретил следующую проблему с Django 1.6.
Я пытаюсь создать пользовательский MultiValueField и ловить ошибку во время отправки формы. Ошибка появляется в "django/forms/fields.py в чистой строке 993":
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?
Мой код настраиваемого поля:
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()