2016-04-08 13 views
0

Yani, bir toplam Django Model Formset Newb sorusu. Benim formu kaydedip bu hatayı almaya devam çalışıyorum:Django Model Formset'imi kaydetmeye çalışıyorum, ManagementForm hatası alıyorum?

İşte
class AttendanceTemplate(TemplateView): 

     template_name = 'attendance/index.html' 

     def get_context_data(self, **kwargs): 
      context = super(AttendanceTemplate, self).get_context_data(**kwargs) 
      instruction = Instruction(self.request.user.username) 

       sections_list = self.request.GET.getlist('sections_list') 
       term = self.request.GET.get('term', instruction.term) 

       enrollments = Enrollment.objects.using('wisp').prefetch_related('profile').filter(section_id__in=['111111'], term=term) 

       attendanceQuery = Enrollment.objects.using('wisp').prefetch_related('student').filter(section_id__in=['111111'], term=term) 


     for enrollment in attendanceQuery: 
      attendance, created = Attendance.objects.update_or_create(
      section_id=enrollment.section_id, 
      term=enrollment.term, 
      first_name=enrollment.student.first_name, 
      last_name=enrollment.student.last_name, 
      email_address=enrollment.student.email_address, 
     ) 

    something = Attendance.objects.filter(section_id__in=['111111'], term=term) 

    formset = AttendanceFormSet(queryset=something) 

    combined = zip(enrollments, formset) 

    context['combined'] = combined 

    return context 

Ben formunu kurtarmaya çalışıyorum nasıl: Burada

['ManagementForm data is missing or has been tampered with'] 

Benim TemplateView için ne var

  <form method="POST" action=""> 
       {% csrf_token %} 
        {% for enrollment, form in combined %} 
         <div class="wrapper-formset"> 
          <div> 
           {{ form.first_name.value }} 
           {{ form.last_name.value }} 
           {{ form.email_address.value }} 
           </div> 
           <div class="clear-all"></div> 
           </div> 
          {% endfor %} 
      <button type="submit" class="save btn btn-default">Save</button> 
      </form> 
: Burada
def post(self, request): 
    formset = AttendanceFormSet(request.POST) 
    if formset.is_valid(): 
     for thing in formset: 
      formset = thing.save() 
      return render_to_response("template/index.html",{'formset': formset}, RequestContext(request)) 
    else: 
     return HttpResponse(error.msg) 

Şablonumdaki ne var

Formumu yanlış kaydediyor muyum? Belki benim döngüsüm yanlış? Ayrıca, her alanı tek tek basmayı tercih ederim, bu yüzden "myform.management_Form" kullanımı benim için çalışmayabilir. (ör., myform.management_form.field_name)

cevap

1

Formları ayrı ayrı oluşturursanız, ürününüzün yönetim formunu içerir. Formlarınızı sıkıştırmanız gerçeği farketmez.

Yönetim formunu eklemek kolay, şablonunuza {% formset.management_form %}'u eklemeniz yeterlidir. Bunun için

<form method="POST" action=""> 
    {% csrf_token %} 
    {{ formset.management_form }} 
    {% for enrollment, form in combined %} 
    ... 

örneğin, formset şablon bağlamında olduğundan emin olmak gerekir, çalışmak için:

context['formset'] = formset 

Sen kullanışlı using model formsets in the template üzerinde doküman bulabilirsiniz. En basit seçenek olan {{ formset }} ile başlamanız, test etmeniz ve ardından şablonu yavaşça özelleştirmeniz iyi bir fikir olacaktır. Bu, şeyler yanlış gittiğinde hata ayıklamayı kolaylaştırır. Şu anda {{ form.id }}'u kaçırmışsınız gibi görünüyor.

+0

Ancak bir zip işlevi kullanıyorum: kombine = zip (kayıtlar, form kümesi) bağlam ['kombine'] = kombine ... ve buna benzer {{combined.management_form}} ekleyerek Çalışıyor –

+0

"zip()' yi görebiliyorum, ama bu hiçbir fark yaratmıyor. Yönetim formunu ayrıca eklemelisiniz. – Alasdair

+0

ah tamam, bu yüzden formları ayrı ayrı bağlam yoluyla geçmem gerekiyor mu? –

İlgili konular