我遇到了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()