2013-02-28 9 views
6

मुझे अजाक्स के साथ एक फॉर्म भेजने में समस्या है। मेरे पास एक ऐसा फॉर्म है जिसे मैं अगले बटन पर क्लिक करके असीमित रूप से किसी अन्य रूप से प्रतिस्थापित करना चाहता हूं।django AJAX अनुरोध

यहाँ स्क्रिप्ट

$(document).ready(function() { 
    $('#MY_FORM').submit(function() { 
     $.ajax({ 
      data: $(this).serialize(), 
      type: $(this).attr('method'), 
      url: $(this).attr('action'), 
      success: function(response) { 
       $('#FORM_DIV').html(response); 
      } 
     }); 
     return false; 
    }); 
}); 

form.py

class CountyForm(forms.Form): 
    county = forms.ModelChoiceField(queryset=County.objects.all(), 
       empty_label='---Select a county---', required=False) 
    other = forms.CharField(required=False) 

    def __init__(self, *args, **kwargs): 
     super(CountyForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.html5_required = True 
     self.helper.form_id = 'MY_FORM' 
     self.helper.add_input(Submit('next', 'Next', css_class='classfinish')) 
     self.helper.layout = Layout('county','other') 


class WardForm(forms.Form): 
    ward = forms.ModelChoiceField(queryset=Ward.objects.all(), 
      empty_label='Select a ward') 
    other = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     super(WardForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.html5_required = True 
     self.helper.add_input(Submit('save', 'Finish')) 
     self.helper.add_input(Submit('cancel', 'Cancel')) 
     self.helper.layout = Layout('ward','other') 

विचारों

def location(request): 
    if request.is_ajax() : 
     wardform = WardForm() 
     return HttpResponse(wardform) 
    countyform = CountyForm() 
    c = {} 
    c.update(csrf(request)) 
    return render(request,'location.html', {'countyform': countyform}) 

मैं चाहता हूँ जब मैं काउंटी के रूप में अगले बटन पर क्लिक करें है, वार्ड प्रपत्र प्रकट करने के लिए ।

+3

आपका प्रश्न क्या है? यद्यपि आप '# FORM_DIV' के बाद उद्धरण खो रहे हैं। –

+0

आपके जेएस में एक वाक्यविन्यास त्रुटि है – Blender

+1

@ पावेल एक टाइपो था, धन्यवाद। – Alexxio

उत्तर

1

इसे दो तरीकों से हल किया जा सकता है, मैं फॉर्म विज़ार्ड को कवर नहीं करूंगा लेकिन मैं आपको दस्तावेज का लिंक दूंगा जो वास्तव में अच्छा है।

मेरी सिफारिश यह है कि आपको फॉर्मवार्ड के लिए जाना चाहिए (आपके पास Django के किस संस्करण के आधार पर) लेकिन मुझे लगता है कि इसे 1.2 में और बाद में Django में स्थानांतरित किया गया था लेकिन मुझे उस पर उद्धरण नहीं दिया गया।

वर्तमान स्थिति में आपको इसके साथ कुछ करना चाहिए।

$(document).ready(function() { 
    $('#MY_FORM').submit(function() { 
     $.ajax({ 
      data: $(this).serialize(), 
      type: $(this).attr('method'), 
      url: $(this).attr('action'), 
      success: function(response) { 
       $('#FORM_DIV').load('/some/url/to/a/wardform'); //new code 
      } 
     }); 
     return false; 
    }); 
}); 

views.py

def ward_form_renderer(request): 
    if request.is_ajax(): 
     ward_form = WardForm() 
     #depending on version of django 
     context = {'wardform': ward_form} 
     context.update(csrf(request)) 
     render(request, 'wardform_template', c) 

क्या यह कर देगा कि यह आपके Django दृश्य से गाया रूप के साथ एक नया html पृष्ठ निकालें और उसे प्रदर्शित करेगा है। मूल रूप से आपने जो किया है वह एक फॉर्म विज़ार्ड है। इस दृष्टिकोण के अन्य दुष्प्रभाव होंगे इसलिए मैं इसे इस तरह से करने की अनुशंसा नहीं करता।

मैं खुद एक ऐसी परियोजना में हूं जो यह करता है और यह ईमानदार होने की खुशी से अधिक दर्द होता है। मैंने इस कोड को स्वयं नहीं किया है, लेकिन आपको यह पता चलता है कि इसे कैसे काम करना चाहिए।

फॉर्म विज़ार्ड दर्ज करें! यह आपके लिए विशेष रूप से अच्छा विकल्प है क्योंकि आपको अपने फॉर्म को फिर से परिभाषित नहीं करना है, आप अपने पास उपयोग कर सकते हैं।

Here's the link to the FormWizard docs

गुड लक!