Я пытаюсь передать объект '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', чтобы избежать путаницы.
Редактировать: простая передача одного объекта в сериализатор не работает, это выдает ошибку: «Пользовательский объект не повторяется»