Django 将MultiWidget中的值合并到一个字段中,以便发布

Django 将MultiWidget中的值合并到一个字段中,以便发布,django,forms,django-forms,widget,Django,Forms,Django Forms,Widget,我正在使用derek73提供的。问题是:它将三个独立的值放在帖子中-我应该如何将它们重新组合成一个值 class USPhoneNumberMultiWidget(forms.MultiWidget): """ A Widget that splits US Phone number input into three <input type='text'> boxes. """ def __init__(self,attrs=None): widgets = (

我正在使用derek73提供的。问题是:它将三个独立的值放在帖子中-我应该如何将它们重新组合成一个值

class USPhoneNumberMultiWidget(forms.MultiWidget):
"""
A Widget that splits US Phone number input into three <input type='text'> 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):
    value = [u'',u'',u'']
    # look for keys like name_1, get the index from the end
    # and make a new list for the string replacement values
    for d in filter(lambda x: x.startswith(name), data):
        index = int(d[len(name)+1:]) 
        value[index] = data[d]
    if value[0] == value[1] == value[2] == u'':
        return None
    return u'%s-%s-%s' % tuple(value)


class UserForm(forms.ModelForm):
    email = forms.EmailField(max_length=30,
        widget=forms.TextInput(attrs={"class":"text"}))
    first_name = forms.CharField(max_length=max_length_for_att(User, 'first_name'),
        widget=forms.TextInput(attrs={"class":"text"}))
    last_name = forms.CharField(max_length=max_length_for_att(User, 'last_name'),
        widget=forms.TextInput(attrs={"class":"text"}))
    phone = USPhoneNumberField(label="Phone",
        widget=USPhoneNumberMultiWidget())
    class Meta:
        model = User
        fields = ('email', 'first_name', 'last_name', 'phone', )
类USPhoneNumberMultiWidget(forms.MultiWidget):
"""
将美国电话号码输入拆分为三个框的小部件。
"""
定义初始化(self,attrs=None):
小部件=(
TextInput(attrs={'size':'3','maxlength':'3','class':'phone'}),
TextInput(attrs={'size':'3','maxlength':'3','class':'phone'}),
TextInput(attrs={'size':'4','maxlength':'4','class':'phone'}),
)
超级(USPhoneNumberMultiWidget,self)。\uuu初始化(widgets,attrs)
def解压缩(自身,值):
如果值:
返回值。拆分(“-”)
返回(无,无,无)
def value_from_datadict(自身、数据、文件、名称):
值=[u'',u'',u'']
#查找像name_1这样的键,从末尾获取索引
#并为字符串替换值创建一个新列表
对于过滤器中的d(λx:x.startswith(名称),数据):
索引=int(d[len(name)+1:]
值[索引]=数据[d]
如果值[0]==值[1]==值[2]==u'':
一无所获
返回u“%s-%s-%s”元组(值)
类UserForm(forms.ModelForm):
email=forms.EmailField(最大长度=30,
widget=forms.TextInput(attrs={“class”:“text”}))
first_name=forms.CharField(max_length=max_length_表示_att(用户“first_name”),
widget=forms.TextInput(attrs={“class”:“text”}))
last_name=forms.CharField(max_length=max_length_表示_att(用户“last_name”),
widget=forms.TextInput(attrs={“class”:“text”}))
phone=USPhoneNumberField(label=“phone”,
widget=USPhoneNumberMultiWidget())
类元:
模型=用户
字段=(‘电子邮件’、‘名字’、‘姓氏’、‘电话’,)

查看USPhoneNumberField。

确保您正在从
表单访问数据。已清理的\u data
而不是
请求。POST

是-我可以看到它返回一个组合值,返回u'%s-%s'%元组(值)-我遇到的问题是,在使用三个单独的值执行POST之前,此选项不可用。因此,它无法将其保存到表单中。