Значение исключения 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()

0 ответов

Другие вопросы по тегам