我想創建爲(分別爲大小3,3和4)具有2個文本字段的電話號碼輸入與普通場「(」「)」「 - 」分隔符。下面是我的代碼字段和小部件,當我嘗試迭代我的表單中的字段在初始呈現期間(它發生在for循環到達我的電話號碼字段時)時出現以下錯誤:Django的MultiWidget電話號碼字段
Caught而渲染的異常:「NoneType」對象是unsubscriptable
class PhoneNumberWidget(forms.MultiWidget):
def __init__(self,attrs=None):
wigs = (forms.TextInput(attrs={'size':'3','maxlength':'3'}),\
forms.TextInput(attrs={'size':'3','maxlength':'3'}),\
forms.TextInput(attrs={'size':'4','maxlength':'4'}))
super(PhoneNumberWidget, self).__init__(wigs, attrs)
def decompress(self, value):
return value or None
def format_output(self, rendered_widgets):
return '('+rendered_widgets[0]+')'+rendered_widgets[1]+'-'+rendered_widgets[2]
class PhoneNumberField(forms.MultiValueField):
widget = PhoneNumberWidget
def __init__(self, *args, **kwargs):
fields=(forms.CharField(max_length=3), forms.CharField(max_length=3), forms.CharField(max_length=4))
super(PhoneNumberField, self).__init__(fields, *args, **kwargs)
def compress(self, data_list):
if data_list[0] in fields.EMPTY_VALUES or data_list[1] in fields.EMPTY_VALUES or data_list[2] in fields.EMPTY_VALUES:
raise fields.ValidateError(u'Enter valid phone number')
return data_list[0]+data_list[1]+data_list[2]
class AdvertiserSumbissionForm(ModelForm):
business_phone_number = PhoneNumberField(required=True)
你不只是使用我們的任何原因。 PhoneNumberField和us.forms.USPhoneNumberField?非常方便,如果你有美國的ophone號碼。 http://docs.djangoproject.com/en/dev/ref/contrib/localflavor/#united-states-of-america-us – hughdbrown 2009-11-22 02:01:42
這將是有益的知道回溯正在發生 - 即提供更多的細節遠遠不止這些一條線。 – 2009-11-22 08:28:27
在參考了@hughdbrown Django的Localflavor提出的建議是在Django 1.5現在所在搬出在https://github.com/django/django-localflavor – davelupt 2015-08-31 18:18:56