문제
Django에서 단일 모델 인스턴스와 리스트로 된 모델 인스턴스를 합쳐서 JSON으로 제공하려면 어떻게 해야 할까?
JSON 자료 구조
JSON 자료 구조는 아래와 같이 단일 모델과 리스트 모델을 순서없이 기술하도록 한다.
{
“list_instance” : [{
“item_name” : “아이템 001”,
“start_ymd” : “20090720”,
“end_ymd” : “99991231”
}, {
“item_name” : “아이템 002”,
“start_ymd” : “20151101”,
“end_ymd” : “20160831”
}
],
“single_instance” : {
“id” : 1,
“project_id” : 2,
“registered_date” : “2016-06-21-07:39:55+00:00”,
“start_ymd” : “20150301”,
“end_ymd” : “99991231”
}
}
|
cs |
views.py 정의
뷰 함수에서 리스트로 된 모델 인스턴스의 각 원소들을 배열에 저장한다. 그리고 단일 모델 인스턴스와 함께 오브젝트로 만들고, to_json 함수를 이용하여 클라이언트에 제공한다.
def to_json(objs, status=200):
json_str = json.dumps(objs, ensure_ascii=False)
return HttpResponse(json_str, status=status, content_type=‘application/json; charset=utf-8’)
def detail_item(request, id):
single_instance = get_object_or_404(Model_A, pk=id)
list_instance = Project.objects.all().order_by(‘registered_date’)[:10]
//serial = []
mArray = []
for elem in list_instance:
mArray.append(elem.serialize())
return to_json({‘single_instance’: single_instance.serialize(), ‘list_instance’: mArray})
|
cs |
jQuery를 이용하여 JSON 객체를 처리하는 방법
// single_instance
data.start_ymd…
// list_instance
$.each(data.list_instance, function () {
……
});
} else {
……
}
|
cs |
최적의 방법일까?
Python, Django, HTML에 대한 기본 지식이 부족하다보니, 검색과 삽질을 통한 구현 결과가 과연 올바른 방법인지 자신이 서지 않는다. 언젠가 머리 속 안개가 걷히는 날이 오겠지.
참고. 실행환경
– OS : Windows 7 Professional K
– Python : v 2.7.5
– Django : v 1.7.11
– Bootstrap : v 3.3.6
– jQuery : v 1.11.3
– bootstrap-select : v 1.10.0