Python 我想回到JSON
它是Python 我想回到JSON,python,json,django,Python,Json,Django,它是UserProfileclass UserProfile模型扩展了AbstractUser class UserProfile(AbstractUser): created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now=True) 这个代码不起作用,我也不知道为什么 变量用户工作。但是变量user1不起作用 def get_rank(request):
UserProfile
class
UserProfile
模型扩展了AbstractUser
class UserProfile(AbstractUser):
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
这个代码不起作用,我也不知道为什么
变量用户
工作。但是变量user1
不起作用
def get_rank(request):
users1 = UserProfile.objects.all().order_by('created_at')
# below code works but variable 'users1' don't work.
# I want users to JSON. ex) users
users = '[{"item":"NEFUS"},{"item":"Layer7"},{"item":"Unifox"},{"item":"Focus"},{"item":"Frs"}]'
return HttpResponse(users , content_type='application/json')
这是AJAX代码
function ajax_get_rank() {
var temp = new XMLHttpRequest();
temp.open("GET","/get_rank/");
temp.onreadystatechange = function() {
if (temp.readyState === 4 && temp.status === 200) {
get_rank(temp.responseText);
}
}
temp.send();
}
函数获取秩(秩数组温度){
var temp=JSON.parse(rank\u array\u temp);
对于(变量i=0;i
这是主要的javascript代码
任何帮助都将不胜感激。您不能直接序列化django模型对象,这样做您将得到
TypeError:queryset不是JSON可序列化的
错误
但您可以使用值
获取要显示的字段集合,然后将其序列化:
function get_rank(rank_array_temp) {
var temp = JSON.parse(rank_array_temp);
for( var i = 0 ; i < temp.length; i++) {
var div_temp = document.createElement("div");
div_temp.className = "rank"
var out = "";
out += "\
<div class = 'rank'>\
<span class = 'grade'>\
<span>"+parseInt(i+1)+".</span>\
</span>\
<span class = 'item_name'>\
<span>"+temp[i].item+"</span>\
</span>\
</div>\
";
div_temp.innerHTML = out;
rank_list.appendChild(div_temp);
}
}
请注意,DateTime
、Date
等字段不可json序列化。您需要的是:
profiles = UserProfile.objects.all().order_by('created_at') \
.values('field1', 'field2')
users1 = json.dumps(profiles)
直接将对象序列化/反序列化为JSOn实际上不是一种好方法,因为:
Decimal
)时,使用values
或values\u list
会出现问题,因为JSON没有十进制类型Decimal
转换为float
from django.core.serializers.json import DjangoJSONEncoder
users1 = json.dumps(profiles, cls=DjangoJSONEncoder)
djangojsonecoder
对python特定类型进行编码,而不会出错
import json
height = Decimal("1.78")
my_dict = {"Name": "Jason", "Age": 16, height: float(height)}
json.loads(my_dict)
from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())
data = serializers.serialize('json', SomeModel.objects.all(), fields=('name','size'))
因此,您可以从每个JSON对象的
fields
键中获取字段和值。您可以查看文档以了解更多信息。您没有描述什么不起作用。您正在传递一个硬编码字符串;你到底想做什么?users1输出是什么样子的?user1=>[,等等]我想返回{0:“Nefus”,1:“Unifox”,2:“Layer7”,等等}或{“item”:“Nefus”,“item”:“Unifox”,“item”:“Layer7”,等等}怎么做?我不明白你评论中字典里的那些值是什么,也不知道整数。对不起,我做得不好。。。。。请理解我想要返回“[{item”:“Unifox”},{“item”:“Layer7”},{“item”:“Nefus”},等等]”
[
{
"pk": "4b678b301dfd8a4e0dad910de3ae245b",
"model": "sessions.session",
"fields": {
"expire_date": "2013-01-16T08:16:59.844Z",
...
}
}
]