具有内联/嵌套数据的Django表单

时间:2018-06-18 17:22:26

标签: django django-models django-forms django-templates inline-formset

我尝试为问题创建编辑器,而问题可能有多个与之关联的文件。我试图让它与inline_formsets一起使用,但我似乎无法让它正常工作。我尝试创建的表单是针对问题的,而我希望用户能够在同一表单上上传问题的文件。

models.py

def Question(models.Model):
  title = models.CharField('Title', max_length=200)
  ...

def AdditionalData(models.Model):
  question = models.ForeignKey(Question, related_name='additionalData`, on_delete=models.CASCADE)
  upload = models.FileField('Data', upload_to=...)

forms.py

class QuestionForm(forms.ModelForm)
   class Meta:
      model = Question
      fields = '__all__'  # for example purposes only

 AdditionalDataFormset = forms.inline_formset_factory(models.Question, models.AdditionalData, fields=('upload',), extra=1)

views.py

class EditQuestion(DetailsView):
    def get(request, pk, **kwargs):
        question = get_object_or_404(Question, pk=pk)
        question_form = QuestionForm(instance=question)
        additional_data_formset = AdditionalDataFormset(instance=question)

        context = {
              'question_form': question_form,
              'additional_data_formset': additional_data_formset
        }
         return render(request,'editor.html', context)

最后,我的模板的一部分editor.html

 <form method="post" action='url...'>
       {% csrf_token %}
       <fieldset>
          {{ question_form|crispy }}
       </fieldset>

       {{ additional_data_formset.management_form }}
       {{ additional_data_formset.non_form_errors }}
       <fieldset>
         {% for additional_data in additional_data_formset %}
               {{ additional_data|crispy }}
         {% endfor %}
       </fieldset>

       <button type="submit" class="save btn btn-default" value="Submit">Submit</button>
 </form>

由于某些原因,当我使用内联表单集时,&#34;提交&#34;按钮不起作用(单击它时没有任何反应)。当我尝试强制提交表单(通过jquery onclick提交按钮)时会抛出此错误:

  

&#39; ManagementForm数据丢失或已被篡改&#39;

我似乎无法弄清楚为什么会这样。至于嵌套方法,我一直无法找到只用两个模型来演示它的例子,所以我不确定如何在这种情况下使用它。正如您在上面所看到的,我打电话给&#34; management_form&#34;完美,所以我不确定为什么会这样。

其他信息: 一个问题可以包含任意数量的文件(AdditionalData实例)。

有关上述错误的任何信息或有关如何实现可包含可变数量子表单的表单的提示将不胜感激。

0 个答案:

没有答案