1

我在保存内联表单时遇到问题。它确实保存了默认表单。但是每当我添加新的内联表单时,它都不会保存。我错过了什么?谁能告诉我这个错误?谢谢你。

模型.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)

表格.py

class StudentForm(forms.ModelForm):


    class Meta:
        model = Student

class CourseForm(forms.ModelForm):

    class Meta:
        model = Course


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

视图.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/

4

1 回答 1

1

好吧,我看不到任何错误,但也许您可以使用更简单的解决方案来添加新表单,这样您就不必使用 jquery formset 了。

Formset 类具有名为 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 会处理所有事情。

于 2013-07-05T14:07:19.920 回答