【问题标题】:Django model formset query generates extra objectDjango 模型表单集查询生成额外对象
【发布时间】:2012-03-25 13:21:31
【问题描述】:

我想创建一组确认模型。我已经成功创建了表单集,但是表单集创建了一个额外的确认对象。

这是我的代码:

查看

def render_fulfillment_modal(request,template='test.html'):
    ....
    formset = modelformset_factory(Confirmation)
    form = formset(queryset=Confirmation.objects.filter(customer_order__deal = deal))

   if request.method == 'POST':
      form = formset(request.POST, request.FILES)
      if form.is_valid():
         form.save()

模板

<form method="post" action="{% url open_fullfill_modal deal.id %}">{% csrf_token %}
      {{ form.management_form }}                  
      {% for f in form %}       
      <tr>
      <td>{{f.fullfilled}}</td>                                 
      <td>
      <p class="name">{{f.instance|confirmation_user_info}}</p>                                  
      </td>                     
      <td><input type="text" class="input-small datepicker"></td>
      <td>{{f.tracking_code}}</td>
      </tr>
      {% endfor %}

     <div class="pull-right button-box"> 
        <button type="submit" class="btn btn-primary btn-large">Save Changes</button>
     </div>

我得到了一个不在我的查询集中的不相关对象的额外表单。我已经用其他模型尝试过这个,每次我得到一个额外的对象。我想这是处理数据的表单集之类的东西,我不确定。当我发布此表单时出现问题。它给了我 MultiValueDictKeyError 这是:

"Key 'form-0-id' not found in <QueryDict: {u'form-MAX_NUM_FORMS': [u''], u'form-TOTAL_FORMS': [u'3'] ... 

有什么想法吗?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您需要将extra=0 传递给表单集:

    formset = modelformset_factory(Confirmation, extra=0)
    

    Django 文档:Limiting the number of editable objects

    【讨论】:

    • 提供 django 文档的链接不是很可靠,因为文档可以随时更改。您能否在回答中解释为什么我们需要这个额外的道具?
    【解决方案2】:

    只需在{{f.fullfilled}} 之前添加一个{{f.id}}

    给所有f一个隐藏的form-id,并在request.Post中传递给QueryDict

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 2015-01-29
      • 2012-12-15
      • 2016-02-21
      相关资源
      最近更新 更多