Я прочитал документацию, но я не совсем уверен, как реализовать serializer.serialize
для объектов JSON на моем view.py. Если кто-нибудь может помочь мне понять это немного лучше. У меня есть следующий код в моем view.py:Django "не JSON serializable" - ajax, views.py - Как реализовать?
@user_passes_test(lambda u: u.is_superuser)
def ProjDetails(request):
proj_id = request.GET['proj_id']
proj = Proj.objects.filter(id=proj_id)
role_list = ProjRole.objects.filter(proj=proj)
proj = {
"proj": proj,
"roles": []
}
for r in role_list:
proj['roles'].append(r.id)
return HttpResponse(json.dumps(proj), content_type='application/json; charset=UTF-8')
Я пытаюсь вызвать это с .ajax (я до сих пор работает на AJAX, так что это, вероятно, не правильно):
$('#proj_list #sel_proj').click(function(){
$('div.sel').removeClass("sel");
$(this).addClass("sel");
var project_id = $(this).data('id');
$.ajax({
url:'../../proj_details',
data: {proj_id: proj_id},
// dataType: 'html',
success: function(data){
$('#proj_display').html(data)
},
error: function() {
alert("Failed to find the project!")
}
});
Как только я получаю вызов JSON для работы, я больше сосредоточусь на ajax.
Самая большая проблема, я получаю сообщение об ошибке 500 HTTP с:
TypeError at ../proj_details
[<Project: Example>] is not JSON serializable
Я использую Django 1.7, но я даже добавил SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
к моему settings.py без удачи. Поэтому я импортировал сериализаторы из django.core и пытался использовать serializer.serialize
, но я не понимаю, как реализовать его, я думаю, потому что мои ошибки продолжают ухудшаться. Я видел другие сообщения с одинаковой ошибкой, но до сих пор не понимаю моих конкретных требований.
+++++++++++++++ EDIT +++++++++++++++++++
Таким образом, единственный способ, которым я был возможность получить эту работу без множественных ошибок, круговыми ошибок, несколько ошибок аргументов, и т.д., является следующее:
def ProjDetails(request):
def date_handler(obj):
return obj.strftime("%B %d, %Y") if hasattr(obj, 'strftime') else obj
proj_id = request.GET['proj_id']
proj = Proj.objects.get(id=proj_id)
corp = Corp.objects.get(id=proj.corp.id)
role_list = ProjRole.objects.filter(proj=proj).all()
proj = {
"proj": {
'title': proj.title,
'id': proj.id,
'date': proj.date,
'description': proj.description
}
"roles": [],
"company": {
'name': corp.name,
'pic': unicode(corp.pic),
}
}
for r in role_list:
proj['roles'].append(r.name)
return HttpResponse(json.dumps(proj, default=date_handler), content_type='application/json; charset=UTF-8')
Единственное, что мне не нравится это, я на самом деле нужно вручную тянуть какие атрибуты I хотите от модели в словаре, а не все атрибуты, извлекаемые из модели, а затем я могу выбрать, какие из них я хочу использовать в своих шаблонах. Я бы предпочел не тянуть все, как мой пример выше. 'roles' = []
дает мне некоторые икоты, потому что я не могу заставить его работать, когда есть несколько ролей для объекта proj.
Мне нравится метод Юджина, потому что он был бы чище, но я не могу заставить его работать с моделью корпуса. В таблицах proj есть corp_id, но я продолжаю получать corp_id, это не атрибут, когда я пытаюсь использовать его с помощью .value(). Get() для объекта proj. Я не понимаю, как реализовать ответ grzgrzgrz3. Я обычно больше работаю с JS, HTML и CSS, и я новичок в Django/python для веб-разработки.
Так что любые предложения, чтобы сделать это более эффективным было бы здорово. Спасибо !!
Затем я получаю ValueError: 'invalid literal для int() с базой 10:' Может быть, это имеет какое-то отношение к фактическим данным в базе данных? Я также видел что-то об использовании списка(). Может ли это быть необходимым? – charlwillia6
Извините, я отредактировал ответ –
Спасибо за ответ. Теперь я получаю атрибут AttributeError, который говорит, что объект «Proj» не имеет атрибутов «значения» – charlwillia6