使用带有JQuery的django.core JSON序列化程序,语法不一致

时间:2012-01-30 18:04:28

标签: jquery python django json

我正在尝试将'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的问题与此类似,但我无法找到实际答案

编辑:添加了“用户”对象,以避免混淆。

编辑:简单地将一个对象传递给序列化程序不起作用,这会产生错误:“'用户'对象不可迭代”

1 个答案:

答案 0 :(得分:1)

我怀疑问题是你正在使用render_to_response,而不是设置mimetype。尝试返回HttpResponse(data, mimetype='application/json')