Django request.POST.items() ведет себя не так, как ожидалось

#django

#django

Вопрос:

У меня есть входящий ajax-запрос, если я напечатаю сообщение, подобное этому:

 print("post_data %s" % request.POST)
  

Я понимаю это:

 post_data <QueryDict: {'csrfmiddlewaretoken': ['...'], 'contact_method 1[]': ['Facebook', 'https://www.facebook.com/aandro.veinilla/', 'Send me a message'], 'contact_method 2[]': ['Whatsapp', ' 593998375445', 'contact me after 8pm']}>
  

Как вы можете видеть, это dict с некоторыми ключами, а значения представляют собой списки. Но если я напечатаю это так:

     for k, v in request.POST.items():
        print("k: %s" % k)
        print("v: %s" % v)
  

Я понимаю это:

 k: csrfmiddlewaretoken
v: ...hEm9OcUE
k: contact_method 1[]
v: Send me a message
k: contact_method 2[]
v: contact me after 8pm
  

Он печатает только последний элемент в каждом списке, почему? Мне нужно перебрать все полученные значения, а не только последний элемент в списке.

Также одна странная вещь, которая может иметь какое-то отношение (не уверен), заключается в том, что django добавляет ‘[]’ к ключам словаря. Я уверен, что я не делал этого в js.

Ответ №1:

QueryDict.items(...) Единственное возвращает последнее значение. Вероятно, вам следует использовать QueryDict.lists(...)

 for k, v in request.POST.lists():
    print("k: %s" % k)
    print("v: %s" % v)  

Обратите внимание, что это вернет список, даже если в request.POST

Комментарии:

1. Это решило проблему. Тем не менее, я все еще думаю .items() , что имеет неадекватное поведение.