Ответ 1
Это связано с этим вопросом. Как указано там, я создал специальную библиотеку для Django/Python для обработки многомерных массивов, отправленных через запросы. Вы можете найти его на GitHub здесь.
У меня есть клиент jquery, который отправляет запрос POST с помощью многомерного массива, примерно так:
friends[0][id] 12345678 friends[0][name] Mr A friends[1][id] 78901234 friends[1][name] Mr B
То есть массив из двух элементов, имя и идентификатор.
Есть ли автоматический способ получения этого ввода в виде списка или словаря? Кажется, я не могу сделать работу .getlist
Это связано с этим вопросом. Как указано там, я создал специальную библиотеку для Django/Python для обработки многомерных массивов, отправленных через запросы. Вы можете найти его на GitHub здесь.
Ссылка DrMeers больше не действительна, поэтому я отправлю еще один способ достижения того же. Это также не идеально, и было бы намного лучше, если бы у Django была встроенная функция. Но, поскольку это не так:
Преобразование многомерных форм-массивов в Django
Отказ от ответственности: я написал этот пост. Суть его заключается в этой функции, которая может быть более надежной, но она работает для массивов одноуровневых объектов:
def getDictArray(post, name):
dic = {}
for k in post.keys():
if k.startswith(name):
rest = k[len(name):]
# split the string into different components
parts = [p[:-1] for p in rest.split('[')][1:]
print parts
id = int(parts[0])
# add a new dictionary if it doesn't exist yet
if id not in dic:
dic[id] = {}
# add the information to the dictionary
dic[id][parts[1]] = post.get(k)
return dic
Помогает ли это? http://dfcode.com/blog/2011/1/multi-dimensional-form-arrays-and-django/
Если вам нужны данные POST, единственный способ получить это - указать точное имя, которое вы ищете:
person[1].name = request.POST['person[1][name]'] person[1].age = request.POST['person[1][age]'] person[2].name = request.POST['person[2][name]'] person[2].age = request.POST['person[2][age]']
Вот быстрый способ обхода на лету в Python, когда вам нужно извлечь значения форм без явного ввода полного имени в виде строки:
person_get = lambda *keys: request.POST[ 'person' + ''.join(['[%s]' % key for key in keys])]
Теперь, когда вам нужна информация, бросьте одну из этих присосок, и у вас будет гораздо более широкая гибкость. Быстрый пример:
person[1].name = person_get('1', 'name') person[1].age = person_get('1', 'age') person[2].name = person_get('2', 'name') person[2].age = person_get('2', 'age')