【问题标题】:Problems changing the prefix of a formset in django在 django 中更改表单集前缀的问题
【发布时间】:2022-01-22 01:24:49
【问题描述】:

我有一个问题,我有一个 formset 和一个 empty_form(在同一个 HTML 中);我让他们做一些计算,对于empty_form,我已经设法提取ID并进行操作,但不是对于formset,这就是我的主要问题是他们有不同的ID,因为表单集的示例如下:

id_form-0-quantity

对于 empty_form 它是:

id__form-1-quantity (one more underscore)

但是使用不同的 ID,我必须在 JS 中进行一些更改,我不想这样做,因为我是 JS 的新手,可能会更多地弄乱代码。 有没有办法将表单集前缀更改为如下所示:id__form-0-quantity?;

我使用了以下行:

formset = ParteFormSet(request.POST, request.FILES, prefix='__form')

但绝对没有发生任何事情

观看次数

def create_Presupuestos(request):
   extra_forms = 1
   ParteFormSet = formset_factory(PresupuestosParteForm, extra=extra_forms, max_num=20)
   presupuestosclientesform=PresupuestosClientesForm(request.POST or None)
   presupuestosvehiculosform=PresupuestosVehiculosForm(request.POST or None)
   presupuestosparteform=PresupuestosParteForm(request.POST or None)
   presupuestosmanoobraform=PresupuestosManoObraForm(request.POST or None)
   presupuestospagosform=PresupuestosPagosForm(request.POST or None)
   if request.method == 'POST':
       formset = ParteFormSet(request.POST, request.FILES, prefix='__form')
       if formset.is_valid():
           presupuestosclientesform.save()
           return redirect('presupuestos:index')
   else:
       formset = ParteFormSet()
   return render(request,'Presupuestos/new-customer.html',{'presupuestosclientesform':presupuestosclientesform,'presupuestosvehiculosform':presupuestosvehiculosform,'presupuestosparteform':presupuestosparteform,'presupuestosmanoobraform':presupuestosmanoobraform,'presupuestospagosform':presupuestospagosform,'formset':formset})

HTML

                                  <table class="table table-bordered table-nowrap align-middle" id="childTable1">
                                                                                <thead class="table-info">
                                                                                  <tr>

                                                                                    <th scope="col">Quantity</th>
                                                                                    <th scope="col">Unit Price</th>
                                                                                    </thead>
                                                                                <tbody>
                                                                                {{ formset.management_form }}
                                                                                {% for form in formset %}
                                                                                <div class="part-form">
                                                                                  <tr>
                                                                                    <td>
                                                                                        {{form.quantity}}
<!--                                                                                      <input type="text" name="parts_quantity" class="form-control input-new-customer-quantity" />-->
                                                                                    </td>
                                                                                    <td>
                                                                                        {{form.unit_price}}
<!--                                                                                      <input type="text" name="parts_unit_price" class="form-control input-new-customer-unit-price" />-->
                                                                                    </td>
                                                                                  </tr>
                                                                                </div>
                                                                                {% endfor %}

                                                                                </tbody>

                                                                              </table>

                                                                            <div class="part-form table-responsive" id="empty-row">
                                                                                    <table class="table table-bordered table-nowrap align-middle">
                                                                                        <tr>
                                                                                            
                                                                                            <td>{{formset.empty_form.quantity}}</td>
                                                                                            <td>{{formset.empty_form.unit_price}}</td>
                                                                                            
                                                                                        </tr>
                                                                                    </table>
                                                                                  </div>

【问题讨论】:

    标签: python html django


    【解决方案1】:

    您还应该在 GET 请求的情况下包含前缀,否则在您第一次加载页面时它不会为该表单添加前缀:

    def create_Presupuestos(request):
       extra_forms = 1
       ParteFormSet = formset_factory(PresupuestosParteForm, extra=extra_forms, max_num=20)
       presupuestosclientesform=PresupuestosClientesForm(request.POST or None)
       presupuestosvehiculosform=PresupuestosVehiculosForm(request.POST or None)
       presupuestosparteform=PresupuestosParteForm(request.POST or None)
       presupuestosmanoobraform=PresupuestosManoObraForm(request.POST or None)
       presupuestospagosform=PresupuestosPagosForm(request.POST or None)
       if request.method == 'POST':
           formset = ParteFormSet(request.POST, request.FILES, prefix='__form')
           if formset.is_valid():
               presupuestosclientesform.save()
               return redirect('presupuestos:index')
       else:
           # prefix in case of a GET ?
           formset = ParteFormSet(prefix='__form')
       return render(request,'Presupuestos/new-customer.html',{'presupuestosclientesform':presupuestosclientesform,'presupuestosvehiculosform':presupuestosvehiculosform,'presupuestosparteform':presupuestosparteform,'presupuestosmanoobraform':presupuestosmanoobraform,'presupuestospagosform':presupuestospagosform,'formset':formset})

    【讨论】:

    • @AnaidBracho:不,我不这么认为:前缀也被表单集传递给额外的表单。
    猜你喜欢
    • 2014-03-13
    • 2012-01-23
    • 1970-01-01
    • 2011-07-06
    • 2018-03-29
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多