javascript 如何将多个列表从 AJAX 传递到Django

thigvfpy  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(117)

我有一个问题,我想从list中获取所有数据,所以我想循环所选项目中的每一个数据并将其插入到数据库中,目前它返回的数据是这样的,当我打印['[object Object]', '[object Object]']时,我如何逐个插入这些数据?还是一个一个打印出来

我有这个列表它是selected_items我循环数据,然后将其传递给 AJAX

selected_items = []; 
for (var i = 0; i < checkBoxes.length; i++) {        
     var selected_obj ={ 
        stock_id: checkBoxes[i].id,
        quantity: row.cells[3].innerHTML
      }
      selected_items.push(selected_obj);
}

控制selected_items时就是这样

所以现在我想用 AJAX 把这些列表传递给django

console.log(selected_items);
  $.ajax({
      type: "POST",
      url: "{% url 'sales-item' %}",
      data:{
        multiple_list: selected_items.join(','), item_size: selected_items.length
      }
  }).done(function(data){...

views.py

out_items = request.POST.getlist('multiple_list[]')
print(out_items)

打印出来是这样的

['[object Object]', '[object Object]']

更新代码如何循环数据?这是我试过的,但它根本不能反映数据

multiple_list: JSON.stringify(selected_items)

visw.py

out_items = request.POST.get('multiple_list')

for i in out_items:
     print(out_items1[i])

**如何打印或插入数据库?

dced5bon

dced5bon1#

当您执行selected_items.join(',')时,您将获取{'stock_id': 5, 'quantity': 15}__str__(或js等效项),它恰好是[object Object]
所以我推荐使用Json,它将对整个嵌套的list-dict进行编码,并在python中作为一个普通的list-dict加载

Javascript

$.ajax({
    type: "POST",
    url: "{% url 'sales-item' %}",
    data:{
      multiple_list: JSON.stringify(selected_items),
      item_size: selected_items.length,
    }
}).done(function(data){...
Python
stock_list = json.loads(request.POST.get('multiple_list'))

print(type(stock_list))
# <class 'list'>

print(stock_list)
# [
#   {'stock_id': 5, 'quantity': 15},
# ]

编辑

是的!,你只需要像普通的嵌套list-dict一样循环它

stock_list = json.loads(request.POST.get('multiple_list'))

for stock_list_item in stock_list:
  obj, was_created_bool = MyModel.objects.get_or_create(
    stock_id=stock_list_item['stock_id'],
    quantity=stock_list_item['quantity']
  )

但是!如果您知道您将创建每个项目,我建议使用bulk_create

stock_list = json.loads(request.POST.get('multiple_list'))

bulk_create_list = []

for stock_list_item in stock_list:
  bulk_create_list.append(
    MyModel(  # Note: NO .object
      stock_id=stock_list_item['stock_id'],
      quantity=stock_list_item['quantity']
    )
  )

# Creates all items in one query
MyModel.objects.bulk_create(bulk_create_list)

&额外花絮
这些都是一样的!* (对于动态创建过滤器相当方便;))*

# setup
stock_list_item = {'stock_id': 5, 'quantity': 15}
# ----

MyModel.objects.get_or_create(
  stock_id=stock_list_item['stock_id'],
  quantity=stock_list_item['quantity']
)
# ==
MyModel.objects.get_or_create(**{'stock_id': 5, 'quantity': 15})
# ==
MyModel.objects.get_or_create(**stock_list_item)

相关问题