2012-04-05 5 views
14

У меня есть querydict, который выглядит следующим образом:Извлечение предметов из из QueryDict

<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}> 

Как бы извлечь из id?

Я попытался сделать queryDictExample.get("id"), но это не сработало.

+5

Fix приложение на стороне клиента, который в результате сломанного объекта первым. –

+0

Как я могу воссоздать вашу переменную? Я не знаком с синтаксисом хитов. – octopusgrabbus

ответ

35

Похоже, ваш клиент размещает JSON, а не formencoded данные. Вместо доступа к request.POST используйте request.body (request.raw_post_data в версиях 1.3 или меньше) и используйте json.loads() для преобразования в dict.

+0

ты спас мой день :) – Ron

+1

Thx много приятель. Ты спас мою задницу. – Volatil3

-2

Вы можете использовать values_list для запроса dict, т. Е .: MyDict.values_list('id') - он вернет список списков с идентификатором внутри. Для того, чтобы вернуть список использования ID MyDict.values_list ('ид', квартира = True)

Полезные ссылки:

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values-list

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values

+1

OP говорит о QueryDicts, а не QuerySets. – Adriaan

5

Возможно, это не в полной мере относится к вам. Но когда я искал это, ваш вопрос был первым вопросом Stackoverflow.

Я просто хотел получить базовые данные POST в Django. Так что просто использование GET отлично подходит для меня. Как утверждали другие, может быть проще лучше форматировать любой скрипт, создающий запрос.

В принципе у меня есть AJAX делает запись в сторону Джанго, СТОЛБ выглядит как это:

params = name=somename&data=abcdefg 
http.send(params); 

то в моем view.py, я сделал это

def somefuntion(request): 
    if request.method == 'POST': 
     log.info('POST applied') 
     alldata=request.POST 
     log.debug(alldata) 
     data = alldata.get("data", "0") 
     name = alldata.get("name", "0") 
     log.info("POST name: " + name) 
     log.info("POST data: " + data) 

Выходной ALLDATA был:

<QueryDict: {u'data': [u'abcdefg'], u'name': [u'somename']}> 

и команды получают дают

name: name 
data: abcdefg 
+0

OMG !! С вчерашнего дня я был сержантом. Спасибо! –

2

Это работает для нескольких значений:

dict(MyDict.lists()) 

ключи Dict являются запрос вары и значения Dict списки значений запроса.

1

Вы можете использовать - request.data.get("content") Это даст вам данные непосредственно, если в переднем конце (jQuery, Angular) вы НЕ использовали JSON.stringify(data).

0

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

dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()} 
Смежные вопросы