문제
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
0 댓글