2013-07-04 20 views
1

我在保存內聯表單時遇到了問題。它確實保存了默認表單。但是每當我添加新的內聯表單時,它都不會保存。我錯過了什麼?任何人都可以告訴我這個錯誤?謝謝。如何保存所有通過javascript添加的內聯表單?

models.py

class Student(models.Model): 

    name = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.name 

class Course(models.Model): 

    student = models.ForeignKey(Student) 
    course = models.CharField(max_length=18) 

forms.py

class StudentForm(forms.ModelForm): 


    class Meta: 
     model = Student 

class CourseForm(forms.ModelForm): 

    class Meta: 
     model = Course 


CourseFormset = inlineformset_factory(Student,Course, extra=1) 

views.py

class CourseCreateView(View): 

    def post(self,request, *args, **kwargs): 
     form = StudentForm(request.POST) 


     if form.is_valid(): 
      std = form.save(commit=False) 

      formset = CourseFormset(request.POST, instance=std) 
      if formset.is_valid(): 
        std.save() 
        formset.save() 


     return HttpResponseRedirect("/course/list") 


    def get(self, request,*args, **kwargs): 

     studentform = StudentForm() 
     formset = CourseFormset() 
     return render(request,'example/course_form.html', {'formset': formset, 'studentform': studentform}) 

和jQuery的formset.js

https://dpaste.de/sVPT0/

回答

1

嗯,我看不到任何錯誤,但也許你可以用更簡單的方法來添加新的形式,這樣你就不必使用jQuery的表單集在所有。

表單集類呼籲empty_form很好的屬性: https://docs.djangoproject.com/en/1.4/topics/forms/formsets/#empty-form

你可以把它作爲「empty_form」上下文變量,並添加內模板此腳本:

<script type="text/template" id="row-template"> 
    <tr> 
    {% for field in empty_form %} 
     <td>{{ field }}</td> 
    {% endfor %} 
    </tr> 
</script> 

<script type="text/javascript"> 
    var formset = {}; 

    $(function() { 
    $('.btn-add-extra-form').click(function() { 
     formset.$total = $('#id_rows-TOTAL_FORMS'); 
     formset.$initial = $('#id_rows-INITIAL_FORMS'); 
     formset.templateRowStr = $('#row-template').html(); 

     formset.newTotal = parseInt(formset.$total.val()); 
     formset.appendRowStr = formset.templateRowStr.replace(/__prefix__/g, formset.newTotal); 
     formset.$total.val(formset.newTotal + 1); 
     $('.table-inline-rows tbody').append(formset.appendRowStr); 
    }); 
    }); 
</script> 

有..沒有必要使用jquery formset :),這是我所做的唯一更改,我不添加任何額外的代碼,django負責處理所有事情。

+0

感謝您的回覆。我花了幾個小時才發現問題。我必須設置前綴。 –

相關問題