I'm trying to understand how to create forms by subclassing MultiWidgets and MultiValueFields. I have a simple Address model and associated forms:
class Address(models.Model):
    user = models.ForeignKey(User)
    city = models.CharField(max_length=255)
    state = models.CharField(choices = settings.STATES, max_length=50)
    postal = models.CharField(max_length=10)
    address = models.TextField()
    class Meta:
        verbose_name_plural = 'Addresses'
class AddressFieldWidget(forms.MultiWidget):
    def decompress(self,value):
        if value:
            return [value[0],value[1],value[2]]
        return ''
    def format_output(self, rendered_widgets):
        str = ''
        line_1 = '<td class="align_left"><label for="contact_phone">Address Line 1</label></td>'
        for field in rendered_widgets:
            str += '<tr>' + line_1
            str += '<td class="align_right">%s</td></tr>' % field
        return '<tr>' + str + '</tr>'
    def value_from_datadict(self,data,files,name):
        line_list = [widget.value_from_datadict(data,files,name+'_%s' %i) for i,widget in enumerate(self.widgets)]
        try:
            return line_list[0] + ' ' + line_list[1] + ' ' + line_list[2]       
        except:
            return ''
class AddressField(forms.MultiValueField):
    def __init__(self,*args,**kwargs):
        fields = (
            forms.CharField(widget=forms.TextInput(attrs={'class':'big'})),
            forms.CharField(widget=forms.TextInput(attrs={'class':'big'})),
            forms.CharField(widget=forms.TextInput(attrs={'class':'big'})),
        )
        super(AddressField,self).__init__(*args,**kwargs)
        self.widget = AddressFieldWidget(widgets=[fields[0].widget, fields[1].widget, fields[2].widget])
    def compress(self, data_list):
        return data_list[0] + ' ' + data_list[1] + ' ' + data_list[2]
class AddressFormNew(forms.ModelForm):
    postal = forms.CharField(widget=forms.TextInput(attrs={'class':'small'}))
    address = AddressField()
    city = forms.CharField(widget=forms.TextInput(attrs={'class':'big'}))
    class Meta:
        model = Address
Well I can't figure out how to use this form in my view. I'm trying to do :
@login_required
def render_addresses(request):
    address_form = AddressFormNew()
    if request.method == 'POST':
        address_form = AddressFormNew(request.POST)
        if address_form.is_valid():
            address_form.save()
            return HttpResponse('ok')
        else:
            return HttpResponse(address_form.errors['address'])
    return render_to_response('profile/addresses.html',context_instance=RequestContext(request,{'address_form':address_form}))
As a result, Django gives me this error:
Enter a list of values.
Also, when I try to print request.POST.items(), it gives address response as 3 seperated datas.
I'm quite lost here, I have to get my address data in one line. How should I achieve that by only saving my form ?
I really appreciate that if someone gives me a clear explanation.