【发布时间】:2012-01-30 18:04:27
【问题描述】:
我正在尝试将“用户”对象(这是一个 Django.models.Model)传递给我的 Web 视图,但是 Django 和 jQuery 似乎并没有就有效 JSON 的构成达成一致。
相关代码:
有问题的对象,用户(在 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 got!”。
根据我目前掌握的信息,我猜测问题可能是 Django 序列化程序输出的东西几乎但不完全不同于 JSON。我无法在任何 JSON 规范中找到方括号(至少,不在这个位置)。
许多人建议的解决方案是使用 simplejson 库,但由于我的用户是 django.models.Model 并且它的字段类型为 django.models.*Field,simplejson 给出了“不想要”的错误.
有什么方法可以修复此代码,而无需从我的序列化字符串中手动修剪 '[' 和 ']'?
P.S.:关于 SO 有一些与此类似的问题,但是我无法找到实际答案
编辑:添加了“用户”对象,以避免混淆。
编辑:简单地将一个对象传递给序列化程序不起作用,这会给出错误:“'User' object is not iterable”
【问题讨论】:
-
来自 Django 的 JSON 是一个
[对象列表]。也许您的 getJSON 没有为对象列表做好准备。 -
这可能是出了什么问题.. 我想知道最好的解决方案是让 Django 的序列化程序将单个对象转换为 JSON(正如我在下面对 Eric Fortin 的回复所示:它并不那么简单只是传递一个对象;))
-
那个帖子显然已经消失了,我已将答案合并到我原来的问题中。
-
我确实删除了它,因为它无助于回答您的问题。
-
好的,我对此很陌生,所以我对 SO 的方式和方法并不完全了解