Django에서 리스트로 된 모델 인스턴스를 JSON 형태로 리턴하기

문제

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 댓글