Heim  >  Fragen und Antworten  >  Hauptteil

So übergeben Sie mehrere Listen von Ajax an Django

Ich habe ein Problem, ich möchte alle Daten von list erhalten, also möchte ich alle Daten im ausgewählten Element durchlaufen und sie in die Datenbank einfügen. Wenn ich derzeit ['[object Object]', '[object Object]'] drucke, werden Daten wie diese zurückgegeben: Wie füge ich diese Daten einzeln ein? Oder einfach einzeln ausdrucken?

Ich habe diese Liste, die selected_items ist. Ich schleife die Daten und übergebe sie dann an 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);
}

Wenn die Konsole selected_items so aussieht

Jetzt möchte ich diese Listen mit Ajax an Django übergeben

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)

So sieht es gedruckt aus

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

Aktualisierter CodeWie schleife ich Daten? Das habe ich versucht, aber es spiegelt überhaupt nicht die Daten wider

multiple_list: JSON.stringify(selected_items)

view.py

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

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

**Wie drucke ich aus oder füge es in die Datenbank ein?

P粉068174996P粉068174996179 Tage vor387

Antworte allen(1)Ich werde antworten

  • 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)
    

    Antwort
    0
  • StornierenAntwort