Maison  >  Questions et réponses  >  le corps du texte

Comment passer plusieurs listes d'ajax à Django

J'ai un problème, je veux obtenir toutes les données de list donc je veux parcourir chaque donnée de l'élément sélectionné et l'insérer dans la base de données, Actuellement, lorsque j'imprime ['[object Object]', '[object Object]'], il renvoie des données comme celle-ci, Comment insérer ces données une à une ? Ou simplement les imprimer un par un ?

J'ai cette liste qui est selected_items Je boucle les données puis je les transmets à 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);
}

Quand la console selected_items est comme ça

Alors maintenant, je veux transmettre ces listes à Django en utilisant ajax

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)

Voici à quoi cela ressemble une fois imprimé

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

Code mis à jourComment boucler les données ? C'est ce que j'ai essayé mais cela ne reflète pas du tout les données

multiple_list: JSON.stringify(selected_items)

view.py

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

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

**Comment imprimer ou insérer dans la base de données ?

P粉068174996P粉068174996179 Il y a quelques jours386

répondre à tous(1)je répondrai

  • P粉680487967

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

    Quand vous exécutez selected_items.join(',') 时,您正在获取 {'stock_id': 5, 'quantity': 15}__str__ (或等效的 js),它恰好是 [object Object ]


    Je recommande donc d'utiliser simplement Json, qui encodera l'intégralité du dictionnaire de liste imbriquée et sera chargé comme un dictionnaire de liste normal en 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},
    # ]
    

    Modifier

    Oui ! , vous faites simplement une boucle dessus comme un dictionnaire de liste imbriquée normal

    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']
      )
    

    Mais ! Si vous connaissez chaque projet que vous allez créer, je vous recommande d'utiliser 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)
    

    &Points forts supplémentaires

    Ceux-ci fonctionnent tous de la même manière ! (C'est très pratique pour créer des filtres dynamiquement ;))

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

    répondre
    0
  • Annulerrépondre