MultiWidgets 및 MultiValueFields를 서브 클래 싱하여 양식을 작성하는 방법을 이해하려고합니다.MultiWidget 및 MultiValueField를 사용하여 양식 모델 저장
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
그럼 내가보기에이 양식을 사용하는 방법을 알아낼 수 없습니다 : 나는 간단한 주소 모델과 관련된 형태를 가지고있다. 내가 할 노력하고있어 :
@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}))
을 결과, 장고 나에게이 오류 준다 : 나는 request.POST.items()를 인쇄 할 때 또한
Enter a list of values.
를, 그것은 주소 응답을 제공합니다 3 개의 분리 된 데이터로.
저는 여기서 분실했습니다. 한 줄에 주소 데이터를 가져와야합니다. 양식을 저장하면 어떻게하면됩니까?
누군가가 나에게 명확한 설명을 주시면 정말로 감사하겠습니다.
내가 decompress 방법을 가지고, 내가 생각하는 value_from_datadict 문제가 발생하지만 난 그것을 사용하는 방법을 몰라? – iva123