Django中的JSON序列化和Jquery中的JSON解析

时间:2012-11-02 12:23:55

标签: django json jquery

所以我有这段代码:

def success_comment_post(request):
    if "c" in request.GET:
        c_id = request.GET["c"]
        comment = Comment.objects.get(pk=c_id)
        model = serializers.serialize("json", [comment])
        data = {'message': "Success message", 
                'message_type': 'success',
                'comment': model }
        response = JSONResponse(data, {}, 'application/json')
        return response
    else:        
        data = {'message': "An error occured while adding the comment.", 
                'message_type': 'alert-danger'}
        response = JSONResponse(data, {}, 'application/json')

回到jQuery我做了以下几点:

$.post($(this).attr('action'), $(this).serialize(), function(data) {
    var comment = jQuery.parseJSON(data.comment)[0];
    addComment($("#comments"), comment);

 })

现在......在Django函数中,为什么我必须将注释放在 [] - > model = serializers.serialize(“json”,[comment])

回到jQuery,为什么我要做jQuery.parseJSON(data.comment) [0]

无论如何我不必这样做?我觉得很奇怪我必须对 [0]

进行硬编码

非常感谢!

1 个答案:

答案 0 :(得分:0)

串行化器.serialize只接受带有django模型实例的查询集或迭代器,但使用Comment.objects.get将返回一个对象而不是迭代器,这就是为什么你需要将它放在[]中以使其成为一个迭代器。

由于它是一个列表,你必须像javascript中的数组一样访问它。我建议不要使用序列化程序并使用simplejson将字段值转换为json。

示例代码:

from django.utils import simplejson as json
from django.forms.models import model_to_dict

comment = Comment.objects.get(pk=c_id)
data = {'message': "Success message", 
        'message_type': 'success',
        'comment': model_to_dict(comment)}
return HttpResponse(json.dumps(data), mimetype='application/json')

我只提到了代码的相关部分。希望这可以解决您的问题