在 ASP.NET MVC 或 ASP.NET Web Api 中,如果我的 C# 代码如下所示,我可以在 jQuery 或 Angular.js 中接收数据列表:
return Json(list, JsonRequestBehavior.AllowGet);
我是 Django 的新手,所以如果我想在首页接收列表,我不知道如何在后端编写。
jQuery:
$.getJSON(url, function (list) {
result=list
};
或者
Angular.js:
$http.get(url).success(function(list) {
result=list
};
我的模特
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
假设数据库中有两个民意调查,
我在views.py中尝试了3种情况。
list = Poll.objects.all()
1.return HttpResponse(list)
我在 jQuery 回调或 Angular 回调中得到的是"Poll objectPoll object"。
2.return HttpResponse(list.values())
我会得到 SyntaxError: " Unexpected token ' "
3.return HttpResponse(list.values_list())
我会得到一个字符串(它似乎也不在 json 中):
"(1, u'Which city is the most beautiful all over the world?', datetime.datetime(2013, 10, 19, 7, 8, tzinfo=<UTC>))(2, u'What is your favourite city?', datetime.datetime(2013, 10, 19, 7, 8, 43, tzinfo=<UTC>))"
但是在 ASP.NET MVC 或 ASP.NET Web Api 中,即使我在后端(C#)中返回 json 列表,我总是在我的 js 回调中得到反序列化列表,所以我可以直接使用它。
我是否使用了错误的 QuerySet API 或错误的列表类型?
提前致谢。
当我尝试一些答案时编辑以添加信息:
感谢您提供详细的答案,但如果我使用:
return HttpResponse(json.dumps([poll.dict for poll in Poll.objects.all() ]))
然后我将代码更改为,
return HttpResponse(json.dumps(Poll.objects.values(), cls=DjangoJSONEncoder))
但我得到的是“[{'pub_date': datetime.datetime(2013, 10, 19, 7, 8, tzinfo=), 'question': u'Which city is the most beautiful all over the world?', u'id': 1}, {'pub_date': datetime.datetime(2013, 10, 19, 7, 8, 43, tzinfo=), 'question': u'你最喜欢哪个城市? ', u'id': 2}] 不是 JSON 可序列化的"。
谷歌搜索后,我将代码更改为
return HttpResponse(serializers.serialize('json', Poll.objects.all()))
This time is no error in js callback,但接收到的数据结构如下所示:
Array[2]
0: Object
fileds: Object
pub_date:...
question:...
model: "polls.poll"
pk: 1
1: Object
fileds: Object
pub_date:...
question:...
model: "polls.poll"
pk: 2
如果我想得到我应该怎么做:
Array[2]
0: Object
id: 1
question:...
pub_date:...
1: Object
id: 2
question:...
pub_date:...