我正在尝试将'User'对象(这是一个Django.models.Model)传递给我的Web视图,但Django和jQuery似乎并不同意构成有效JSON的内容。
相关的代码:
有问题的对象,User(在models.py中)
class User(models.Model):
def __unicode__(self):
return self.name
name = models.CharField(max_length = 255)
adress = models.CharField(max_length = 255)
city = models.CharField(max_length = 255)
bank_account = models.CharField(max_length = 9)
email = models.EmailField()
barcode = models.CharField(max_length = 10)
isAdmin = models.BooleanField()
credit = models.IntegerField()
视图(在views.py中):
def user(request, user_id):
user = User.objects.filter(pk=user_id)
JSONSerializer = serializers.get_serializer("json")
json_serializer = JSONSerializer()
json_serializer.serialize(user)
data = json_serializer.getvalue()
if request.is_ajax():
return render_to_response("pos/user.json", {'user': data});
else:
return HttpResponse(status=400);
Django模板(pos / user.json):
{{user}}
jQuery代码:
var resp = $.getJSON("user/" + $('#elem').text() + ".json",function(json) {
$('#debug').html("json gotten!");
});
resp.error(function(){$('#debug').html(resp.responseText);});
结果是#elem保持不变,#debug获取值:
[{"pk": 4, "model": "pos.user", "fields": {"city": "test", "name": "test", "barcode": "test", "credit": 10, "isAdmin": false, "adress": "test", "email": "example@example.com", "bank_account": "000000000"}}]
如果从输出中删除方括号,#debug变为“json gotten!”。
根据我到目前为止的信息,我猜测问题可能是Django序列化器几乎输出了一些东西,但并不完全不同于JSON。我无法在JSON的任何规范中找到方括号(至少,不在此位置)。
许多建议的解决方案是使用simplejson库,但由于我的用户是django.models.Model,其字段的类型为django.models。* Field,simplejson给出了“不想要”变种的错误
有没有办法解决这段代码,而不是手工修剪序列化字符串中的'['和']'?
P.S。:有一些关于SO的问题与此类似,但我无法找到实际答案
编辑:添加了“用户”对象,以避免混淆。
编辑:简单地将一个对象传递给序列化程序不起作用,这会产生错误:“'用户'对象不可迭代”
答案 0 :(得分:1)
我怀疑问题是你正在使用render_to_response,而不是设置mimetype。尝试返回HttpResponse(data, mimetype='application/json')