Django MultiWidget Phone Number Field

后端 未结 4 650
执笔经年
执笔经年 2020-12-31 20:54

I want to create a field for phone number input that has 2 text fields (size 3, 3, and 4 respectively) with the common \"(\" \")\" \"-\" delimiters. Below is my code for th

4条回答
  •  北海茫月
    2020-12-31 21:24

    I think the value_from_datadict() code can be simplified to:

    
    class USPhoneNumberMultiWidget(forms.MultiWidget):
        """
        A Widget that splits US Phone number input into three  boxes.
        """
        def __init__(self,attrs=None):
            widgets = (
                forms.TextInput(attrs={'size':'3','maxlength':'3', 'class':'phone'}),
                forms.TextInput(attrs={'size':'3','maxlength':'3', 'class':'phone'}),
                forms.TextInput(attrs={'size':'4','maxlength':'4', 'class':'phone'}),
            )
            super(USPhoneNumberMultiWidget, self).__init__(widgets, attrs)
    
        def decompress(self, value):
            if value:
                return value.split('-')
            return [None,None,None]
    
        def value_from_datadict(self, data, files, name):
            values = super(USPhoneNumberMultiWidget, self).value_from_datadict(data, files, name)
            return u'%s-%s-%s' % values
    

    The value_from_datadict() method for MultiValueWidget already does the following:

    
        def value_from_datadict(self, data, files, name):
            return [widget.value_from_datadict(data, files, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
    

提交回复
热议问题