2008-10-22 7 views
17

मैं कुछ ऐसे स्वरूप में कहते हैं:Django फार्म कैसे उपसर्ग पैरामीटर का उपयोग करने

class GeneralForm(forms.Form): 
    field1 = forms.IntegerField(required=False) 
    field2 = forms. IntegerField(required=False) 

और मैं इसे दो बार एक पृष्ठ पर एक प्रपत्र टैग के भीतर एक अलग उपसर्ग जैसे ,:

साथ हर बार दिखाना चाहते हैं
rest of page ... 
<form ..> 
GeneralForm(data,prefix="form1").as_table() 
GeneralForm(data,prefix="form2").as_table() 
<input type="submit" /> 
</form> 
rest of page ... 

जब उपयोगकर्ता इसे सबमिट करता है, तो मैं सबमिट करने के लिए सबमिट किए गए फॉर्म को दो अलग-अलग रूपों में कैसे वापस प्राप्त कर सकता हूं, और इसे फिर से चला सकता हूं?

This was the only documentation मुझे मिल सकता है और यह चापलूसी है।

उत्तर

31

आप प्रत्येक फॉर्म को सामान्य रूप से संसाधित करते हैं, यह सुनिश्चित करते हुए कि आप ऐसे उदाहरण बनाते हैं जिनमें प्रारंभिक रूप से प्रपत्र उत्पन्न करने के लिए उपयोग किए जाने वाले समान उपसर्ग होते हैं।

यहाँ एक थोड़ा अजीब प्रपत्र आपके द्वारा दिए गए का उपयोग कर उदाहरण दिया गया है, मैं नहीं जानता कि क्या सही उपयोग मामला है:

def some_view(request): 
    if request.method == 'POST': 
     form1 = GeneralForm(request.POST, prefix='form1') 
     form2 = GeneralForm(request.POST, prefix='form2') 
     if all([form1.is_valid(), form2.is_valid()]): 
      pass # Do stuff with the forms 
    else: 
     form1 = GeneralForm(prefix='form1') 
     form2 = GeneralForm(prefix='form2') 
    return render_to_response('some_template.html', { 
     'form1': form1, 
     'form2': form2, 
    }) 

यहाँ कुछ वास्तविक दुनिया नमूना कोड जो का उपयोग कर प्रसंस्करण रूपों को दर्शाता है है उपसर्ग:

http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था! – Greg

5

और भी बेहतर, मुझे लगता है कि वास्तव में formsets आप जो खोज रहे हैं है।

class GeneralForm(forms.Form): 
    field1 = forms.IntegerField(required=False) 
    field2 = forms. IntegerField(required=False) 

from django.forms.formsets import formset_factory 

# GeneralSet is a formset with 2 occurrences of GeneralForm 
# (as a formset allows the user to add new items, this enforces 
# 2 fixed items, no less, no more) 
GeneralSet = formset_factory(GeneralForm, extra=2, max_num=2) 

# example view 

def someview(request): 
    general_set = GeneralSet(request.POST) 
    if general_set.is_valid(): 
     for form in general_set.forms: 
      # do something with data 
    return render_to_response("template.html", {'form': general_set}, RequestContext(request)) 

तुम भी एक formset स्वचालित रूप से modelformset_factory के साथ एक मॉडल से उत्पन्न है, जो स्वचालित Django व्यवस्थापक द्वारा उपयोग किया जाता है हो सकता है। फॉर्मसेट को सरल रूपों से भी अधिक सामान संभालते हैं, जैसे आइटम जोड़ने, हटाने और क्रमबद्ध करना।

संबंधित मुद्दे