避免Django的QueryDict列表限制

时间:2011-09-02 01:55:11

标签: ajax django json simplejson

我正在尝试将数据从网页发送到django视图,以便将其保存为序列化的json到数据库。如果可能的话,我想避免使用django的QueryDict对象,只需用simplejson读取请求,展平并保存到数据库中。发送数据的最佳方法是什么,这样简单的json可以压扁它?

var languages = {};
languages['english'] = ['mark', 'james'];
languages['spanish'] = ['amy', 'john'];

$.ajax({
    type: 'POST',
    url: '/save/',
    data: languages,
    dataType: 'json'
});

if request.is_ajax() and request.method == 'POST':
    for key in request.POST:
        print key
        valuelist = request.POST.getlist(key)
        print valuelist

3 个答案:

答案 0 :(得分:5)

我怀疑是否有可能让django避免创建QueryDict,但你可以忽略它(来自iphone Json POST request to Django server creates QueryDict within QueryDict):

def view_example(request):
    data=simplejson.loads(request.raw_post_data)

答案 1 :(得分:4)

您是否尝试过QueryDict.lists()或QueryDict.dict()方法? https://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects

答案 2 :(得分:1)

您可以尝试http://code.google.com/p/jquery-json/并在客户端制作json字符串。

var languages = {};
languages['english'] = ['mark', 'james'];
languages['spanish'] = ['amy', 'john'];

var json_languages = $.toJSON(languages);//'{"plugin":"jquery-json","version":2.2}'

// '{"spanish": ["amy", "john"], "english": ["mark", "james"]}'

$.post('/save/', {data: json_languages});

仅供参考:

if request.is_ajax() and request.method == 'POST':
     data = request.POST.get('languages')

这不是最好的做法,但有时它对我有效。