【发布时间】:2010-12-19 03:28:46
【问题描述】:
我想为电话号码输入创建一个字段,该字段具有 2 个文本字段(分别为 3、3 和 4 号),并带有常见的“(”“)”“-”分隔符。下面是我的字段和小部件代码,在初始渲染期间尝试迭代表单中的字段时出现以下错误(当 for 循环到达我的电话号码字段时发生):
渲染时发生异常:“NoneType”对象不可订阅
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)
【问题讨论】:
-
您不只是使用 us.models.PhoneNumberField 和 us.forms.USPhoneNumberField 的任何原因?如果您有美国电话号码,非常方便。 docs.djangoproject.com/en/dev/ref/contrib/localflavor/…
-
知道回溯发生在哪里会很有用——即提供比那一行更多的细节。
-
参考@hughdbrown 提出的建议,Django-Localflavor 在 Django 1.5 中被移出,现在位于github.com/django/django-localflavor
标签: python django-templates django-forms django-widget django-models