所以我有这段代码:
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]
进行硬编码非常感谢!
答案 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')
我只提到了代码的相关部分。希望这可以解决您的问题