2013-08-21 4 views
8

मुझे अपने फॉर्मेट के माध्यम से सबमिट किए गए डेटा तक पहुंचने में कठिनाई हो रही है। यहाँ मेरी कोड है:Django फॉर्मेट डेटा तक पहुंच

टेम्पलेट:

<form action="" method="post"> 
    {% csrf_token %} 
    {{ formset.management_form }} 
    {% for form in formset %} 

    {{ form.as_p }} 

    {% endfor %} 

    <input type="submit" value="Submit"> 

</form> 

दृश्य:

def addMembers(request, id, members): 
    if request.user.is_authenticated(): 
     members = int(members) 
     MemberFormSet = formset_factory(MemberForm, extra = members) 
     if request.method == 'POST': 
      print 'post' 
      formset = MemberFormSet(request.POST) 
      if formset.is_valid(): 
       cd = formset.cleaned_data 
       for f in formset: 
        first_name = cd.first_name 
        last_name = cd.last_name 
        email = cd.email 
        house = House.objects.get(id = id) 
        member = Member(first_name = first_name, last_name = last_name, email = email, house = house, created_on = timezone.now()) 
        member.save() 
       return HttpResponseRedirect(reverse('houses:controlPanel')) 
     else: 
      formset = MemberFormSet() 
     return render_to_response('houses/add_members.html', {'formset' : formset}, context_instance = RequestContext(request)) 
    return HttpResponseRedirect(reverse('allauth.account.views.login')) 

मैं से अलग डेटा एक्सेस करने के कई तरीके की कोशिश की है जो वर्तमान में सहित लिखा है: f['attribute'] cd['attribute'] request.POST['attribute'] formset.cleaned_data['attribute']

मैं u"Key 'email' not found in Form" से list indices must be integers, not str

मैं डेटा एक formset द्वारा प्रस्तुत कैसे तक पहुँचने की जानी चाहिए को लेकर त्रुटियों? Django का दस्तावेज इस पर स्पष्ट उत्तर देने में विफल रहता है और चारों ओर खोज करने के लिए मुझे कई अलग-अलग तरीके मिलते हैं लेकिन अभी तक कोई भी काम नहीं करता है। आपकी सहायता के लिए धन्यवाद.

उत्तर

15

सीडी एक शब्दकोश है। इसके अलावा, आप बल्कि formset

if request.method == 'POST': 
    formset = MemberFormSet(request.POST) 
    if formset.is_valid(): 
     for f in formset: 
      cd = f.cleaned_data 
      first_name = cd.get('first_name') 
      last_name = cd.get('last_name') 
      email = cd.get('email') 
      house = House.objects.get(id = id) 
      member = Member(first_name = first_name, last_name = last_name, email = email, house = house, created_on = timezone.now()) 
      member.save() 
     return HttpResponseRedirect(reverse('houses:controlPanel')) 
+0

आपको 'f.is_valid()' की जांच करने की आवश्यकता नहीं है। एक फॉर्मेट वैध नहीं है जब तक कि इसके सभी फॉर्म भी मान्य न हों। –

+0

@PeterDeGlopper आप सही हैं – karthikr

+0

is_valid से पहले यह जांचने के लिए कोई तरीका है? – radtek

0

मुझे लगता है कि आप एक model_formsetfactory एक inlineformset_factory का उपयोग करना चाहिए, या और भी बेहतर, की तुलना में अलग-अलग रूपों में मौजूद मानों शब्दकोश लाने के लिए चाहते हो सकता है। आप फॉर्म डेटा से मॉडलों को पॉप्युलेट कर रहे हैं, जो उन्हें डिजाइन किया गया है। प्रतिबद्ध = गलत का उपयोग करके फ़ॉर्मेट से गंदे मॉडल प्राप्त करें, और अपने घर के रिश्ते में जोड़ें। कुछ ऐसा:

MemberFormSet = model_formset_factory(Member, extra= members) 
if request.method == POST: 
    formset = MemberFormSet(request.POST) 
    if formset.is_valid(): 
     house = House.objects.get(id = id) 
     models = formset.save(commit=False) 
     for member in models: 
      member.house = house 
      member.save() 
     return render(<your data>) 
else: 
    formset = MemberFormSet() 
return render(<your data>) 

नोट करें कि आपका प्राप्त() हाउस ऑब्जेक्ट मौजूद नहीं होने पर अपवाद भी फेंक देगा। बस एक डिजाइन विचार।

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