一般的な "(" ")" "区切り文字を持つ2つのテキストフィールド(それぞれサイズ3、3、4)を持つ電話番号入力のフィールドを作成します。以下は、フィールドとウィジェットのコードです。最初のレンダリング時にフォームのフィールドを繰り返し処理しようとしたときに次のエラーが表示されます(forループが自分の電話番号フィールドに到達したときに発生します)。Django MultiWidget電話番号フィールド
キャッチレンダリング中に例外:「NoneType」オブジェクトは、私がhughdbrownのアドバイスを取って、私は必要なものを行うにはUSPhoneNumberFieldを修正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)
あなただけの私たちを使用していない理由。 Model.PhoneNumberFieldとus.forms.USPhoneNumberField?米国の電話番号があれば非常に便利です。 http://docs.djangoproject.com/en/dev/ref/contrib/localflavor/#united-states-of-america-us – hughdbrown
トレースバックの発生場所を知ることは有益でしょう。 1行 –
@hughdbrownの提案を参考にして、Django-LocalflavorはDjango 1.5に移されました。現在はhttps://github.com/django/django-localflavor – davelupt