2012-04-05 35 views
14

Tôi có một querydict trông giống như sau:mục Extracting ra khỏi một QueryDict

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

Làm thế nào tôi có thể trích xuất ra id?

Tôi đã thử thực hiện queryDictExample.get("id") nhưng không hoạt động.

+5

Fix ứng dụng client-side đó là kết quả trong đối tượng bị gãy đầu tiên. –

+0

Tôi làm cách nào để tạo lại biến của bạn? Tôi không quen thuộc với cú pháp lượt truy cập. – octopusgrabbus

Trả lời

35

Nó có vẻ như khách hàng của bạn được đăng JSON hơn formencoded dữ liệu. Thay vì truy cập request.POST, hãy sử dụng request.body (request.raw_post_data trong các phiên bản 1.3 trở xuống) và sử dụng json.loads() để chuyển đổi thành dict.

+0

bạn đã lưu ngày của tôi :) – Ron

+1

Thx rất nhiều bạn thân. Bạn đã cứu mông của tôi. – Volatil3

-2

Bạn có thể sử dụng giá trị_list trên dict truy vấn, tức là: MyDict.values_list('id') - nó sẽ trả về danh sách các danh sách có id bên trong. Để trở về danh sách các id sử dụng MyDict.values_list ('id', phẳng = True)

Liên kết hữu ích:

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 đang nói về QueryDicts, không phải QuerySets. – Adriaan

5

Có thể điều này không áp dụng đầy đủ cho bạn. Nhưng khi tôi tìm kiếm điều này, câu hỏi của bạn là câu hỏi Stackoverflow đầu tiên.

Tôi chỉ muốn nhận dữ liệu POST cơ bản trong Django. Vì vậy, chỉ cần sử dụng GET làm việc tốt cho tôi. Như những người khác đã nói, có thể dễ dàng định dạng tốt hơn bất kỳ tập lệnh nào đang tạo truy vấn.

Về cơ bản tôi có một AJAX làm một bài hướng Django, POST trông hơi như thế này:

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

sau đó trong view.py của tôi, tôi đã làm điều này

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) 

Kết quả của alldata là:

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

và nhận lệnh cung cấp

name: name 
data: abcdefg 
+0

OMG !! Tôi đã là kẻ quấy rối 'với điều này kể từ hôm qua. Cảm ơn bạn! –

2

này làm việc cho nhiều giá trị:

dict(MyDict.lists()) 

phím Dict là truy vấn vars, và các giá trị dict là danh sách các giá trị truy vấn.

1

Bạn có thể sử dụng - request.data.get("content") Điều này sẽ cung cấp cho bạn dữ liệu trực tiếp nếu ở giao diện người dùng (jQuery, Góc) bạn chưa sử dụng JSON.stringify(data).

0

này cũng làm việc cho các giá trị mà là danh sách:

dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()} 
Các vấn đề liên quan