использование django.core сериализатора JSON с JQuery, несоответствие синтаксиса - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь передать объект 'User' (который является Django.models.Model) моему веб-представлению, однако 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. * Поле, simplejson выдало ошибку «нехочу "разнообразие.

Можно ли как-нибудь исправить этот код, не прибегая к ручному обрезанию '[' и ']' из моей сериализованной строки?

PS: Есть несколько вопросовна SO, которые похожи на этот, я не смог найти фактический ответ

Edit: добавлен объект 'User', чтобы избежать путаницы.

Редактировать: простая передача одного объекта в сериализатор не работает, это выдает ошибку: «Пользовательский объект не повторяется»

1 Ответ

1 голос
/ 30 января 2012

Я подозреваю, что проблема в том, что вы используете render_to_response, а не устанавливаете mimetype. Попробуйте просто вернуть HttpResponse(data, mimetype='application/json')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...