只是django动态formset和ajax

时间:2018-02-08 19:34:38

标签: javascript jquery ajax django

我使用django动态formset和ajax来清理库存。当我添加表单时,如何让ajax在新表单上进行更改?

动态表单集添加表单

    $('#form-inline tbody tr').formset({
addText: 'add link',
deleteText: 'remove',
prefix: 'ptpositions'
});

我在ajax中循环表单,但我不认为这是一个好方法。

$(document).ready(function(){

{% for forms in formset %}
$(".{{forms.stock.value}}").change( function(){
var symbol = $(".{{forms.stock.value}} option:selected").text();
{% endfor %}

{% for forms in formset %}
$.ajax({
    url: "{% url 'inventory:get_position' ptinventory_obj.id date %}",
    type: "GET",
    data: { 'product': product },
    datatype: 'json',
    success: function(data) {
        $(".{{forms.id.value}}_ouput").html(data.price);

    }});
    {% endfor %}

});

})

现在如果我添加表单,那么ajax就不起作用了。

编辑

现在我只循环一次,但结果是相同的

$(document).ready(function(){

{% for forms in formset %}
$(".{{forms.stock.auto_id}}").change( function(){
var symbol = $(".{{forms.stock.auto_id}} option:selected").text();

$.ajax({
    url: "{% url 'inventory:get_position' ptinventory_obj.id date %}",
    type: "GET",
    data: { 'product': product },
    datatype: 'json',
    success: function(data) {
        $(".{{forms.inventory.auto_id}}").html(data.price);

    }});


});
{% endfor %}
})

我发现的主要问题可能是输出......当我添加一个表单时。没有输出显示。不知道为什么......

我现在意识到新创建的表单有None类,这意味着在保存之前form.id.value是none。内联位置尚未创建。如何将id保存给尚未保存的formset实例?

已编辑

好的,我知道问题是什么,但不知道如何解决它 每次我都在表格中添加一个新表格



{% for forms in formset %} {{ forms.id }}


<tr class="dynamic">

  <td style="width:100px" class="{{forms.stock.auto_id}}">{{ forms.stock.errors }} {{ forms.stock}}{{forms.stock.fields.auto_id}}
  </td>

  <td style="width:100px">{{ forms.inventory.errors }} {{ forms.inventory}}
  </td>
&#13;
&#13;
&#13;

问题是添加的新表单{{forms.stock}}有一个新ID 但如果我使用{{forms.stock.auto_id}} id不会改变...而不是它将永远是所有新表格的id_ptposition-1-stock。如何使用django标签获取id_ptposition-2-stock?

1 个答案:

答案 0 :(得分:0)

你的代码有2个循环,看起来它应该只是一个

$(document).ready(function(){

{% for forms in formset %}
  $(".{{forms.stock.value}}").change( function(){
    var symbol = $(".{{forms.stock.value}} option:selected").text();

    $.ajax({
      url: "{% url 'inventory:get_position' ptinventory_obj.id date %}",
      type: "GET",
      data: { 'product': product },
      dataType: 'json',
      success: function(data) {
        $(".{{forms.id.value}}_ouput").html(data.price);
      }
    });   
  });
{% endfor %}
});