Comment passer plusieurs listes d'ajax à Django
P粉068174996
P粉068174996 2024-04-03 23:20:06
0
1
619

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粉068174996
P粉068174996

répondre à tous(1)
P粉680487967

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)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal