0

所以我有这个代码:

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]

非常感谢!

4

1 回答 1

0

好吧,serializers.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')

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

于 2012-11-02T18:36:11.710 回答