2012-05-30 18 views
6

रूपों मैं जरूरत से एक सरल क्षेत्रों में से एक समग्र है formset प्रपत्र क्षेत्र के रूप में (कहते हैं कि "विभाग", "बिल्डिंग" और "RoomNumber"), और क्षेत्रों के गतिशील रूप से उत्पन्न जोड़े की (कहते हैं कि "नाम" और " ईमेल")। आदर्श रूप से, सरल फ़ील्ड की सामग्री को संपादित करना और गतिशील फ़ील्ड जोड़े को जोड़ना/निकालना एक ही रूप में किया जाएगा।Django:

कोड-वार, मैं सोच रहा हूं कि एक सामान्य रूप में एक फ़ील्ड के रूप में एक फॉर्मेट (दो गतिशील क्षेत्रों के साथ एक फॉर्म के रूप में) को एम्बेड करने का प्रयास करना एक समझदार दृष्टिकोण है या यदि मैं प्राप्त करने के लिए एक और सर्वोत्तम अभ्यास है, डी पूरा करने के लिए पसंद है।

इन मामलों पर किसी भी सलाह के लिए बहुत धन्यवाद,

+0

हम इस ओर इशारा करते हुए के लिए काम शुरू करने के लिए =) – okm

उत्तर

8

मुझे यकीन है कि जहां यह विचार है कि आप की जरूरत "एक क्षेत्र के रूप में एक formset एम्बेड करने के लिए" से आता है नहीं कर रहा हूँ; यह standard usage of formsets के मामले की तरह लगता है।

उदाहरण के लिए (अपने मॉडल के बारे में एक पूरी मान्यताओं के मेजबान बनाने):

class OfficeForm(forms.Form): 
    department = forms.ModelChoiceField(... 
    room_number = forms.IntegerField(... 

class StaffForm(forms.Form): 
    name = forms.CharField(max_length=... 
    email = forms.EmailField(... 

from django.forms.formsets import formset_factory 

StaffFormSet = formset_factory(StaffForm) 

और फिर, अपने दृश्य के लिए:

def add_office(request): 
    if request.method == 'POST': 
     form = OfficeForm(request.POST) 
     formset = StaffFormSet(request.POST) 

     if form.is_valid() && formset.is_valid(): 
      # process form data 
      # redirect to success page 
    else: 
     form = OfficeForm() 
     formset = StaffFormSet() 

    # render the form template with `form` and `formset` in the context dict 

संभावित सुधार:

  • उपयोग django-dynamic-formset jQuery plugin यू दिखाए बिना शायद-वांछित "एक कार्यालय के लिए कर्मचारियों की एक मनमाना संख्या को जोड़ने" कार्यक्षमता प्राप्त करने के लिए प्रत्येक बार रिक्त रूपों का एक ढेर sers sers।
  • उपयोग model formsets बजाय (सूचना आप एकत्र कर रहे हैं Django मॉडल के द्वारा समर्थित है यह सोचते हैं), तो आप स्पष्ट रूप से क्षेत्र के नाम या प्रकार निर्दिष्ट करने के लिए नहीं है।

आशा इस मदद करता है।

+1

धन्यवाद कुछ कोड की जरूरत है। मैं तथ्य यह है कि मैंने सोचा था कि द्वारा गुमराह किया गया था (जो जानता है कि क्यों), कि यह और अधिक व्यावहारिक हो सकता है अगर 'StaffFormSet' किसी भी तरह' OfficeForm' के एक क्षेत्र के रूप में घोषित किया गया था। मैं आपके दृष्टिकोण को आज़मा दूंगा। – Mark

+0

मैं भी गलती से सोचा formset फार्म पर एक क्षेत्र होना चाहिए, लेकिन इस जवाब में मदद की। उत्तर में जोड़ने के लिए, अपने टेम्पलेट में, आप उसी फ़ॉर्म 'फ़ॉर्म' टैग के अंदर 'फॉर्म' और' फॉर्मेट 'प्रस्तुत करेंगे। इस तरह सभी फॉर्म डेटा एक ही पोस्ट में वापस आते हैं। – Seth