2014-04-07 141 views
2

我想以json格式序列化自定义对象,其中entryData是我的域对象的列表。事情是这样的:Django:自定义对象json序列化

{ 
    "total":2, 
    "current":1, 
    "entryData":[ 
     { 
      "id":1, 
      "version":0, 
      "name":"Default Station" 
     }, 
     { 
      "id":2, 
      "version":3, 
      "name":"Default Station 1" 
     } 
    ] 
} 

在这里我做了什么让JSON输出在我的尝试中的一种:

def ground_station_listgrid(request): 
    entryData = serializers.serialize("json", GroundStation.objects.all()) 
    response_data = {} 
    response_data['totalPages'] = 2 
    response_data['currentPage'] = 1 
    response_data['entryData'] = entryData 

    return HttpResponse(json.dumps(response_data),mimetype='application/json') 

但结果entryData评价为一个字符串,用引号转义:

{ 
"totalPages": 1, 
"currentPage": 1, 
"entryData": "[{\"pk\": 1, \"model\": \"satview.groundstation\", .... 

我也tryed做这样的事情:

def ground_station_listgrid(request): 

    response_data = {} 
    response_data['totalPages'] = 1 
    response_data['currentPage'] = 1 
    response_data['entryData'] = GroundStation.objects.all() 

    return HttpResponse(json.dumps(response_data),mimetype='application/json') 

但我得到这个例外:[<GroundStation: nome>, <GroundStation: nome>, <GroundStation: nome>] is not JSON serializable

有人请指出我的正确方向吗?

在此先感谢 马尔科

回答

4

您可以使用model_to_dict()

def ground_station_listgrid(request): 
    data = [model_to_dict(instance) for instance in GroundStation.objects.all()] 
    response_data = {} 
    response_data['totalPages'] = 1 
    response_data['currentPage'] = 1 
    response_data['entryData'] = data 

    return HttpResponse(json.dumps(response_data),mimetype='application/json') 

虽然我更喜欢使用包含在Django电池:django.core.serializers,但是,因为你有一个自定义JSON响应,model_to_dict()出现是要走的路。

还有其他的选择在这里(如使用values_list()):

+0

非常感谢你..它的作品! – gipinani