首頁  >  問答  >  主體

傳遞多個列表從ajax到Django的方法

我有一個問題,我想從 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)

view.py

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

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

**如何列印或插入資料庫?

P粉068174996P粉068174996179 天前382

全部回覆(1)我來回復

  • P粉680487967

    P粉6804879672024-04-04 14:29:06

    當您執行selected_items.join(',') 時,您正在取得{'stock_id': 5, 'quantity': 15}__str__ (或等效的js),它恰好是[object Object ]


    所以我建議只使用 Json,它將對整個嵌套列表字典進行編碼,並將作為 python 中的普通列表字典加載

    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))
    # 
    
    print(stock_list)
    # [
    #   {'stock_id': 5, 'quantity': 15},
    # ]
    

    編輯

    是的! ,你只需像普通的嵌套列表字典一樣循環它

    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)
    

    回覆
    0
  • 取消回覆