Django:自定义对象json序列化

gip*_*ani 3 python django json

我想以json格式序列化自定义对象,其中entryData是我的域对象的列表.像这样的东西:

{
    "total":2,
    "current":1,
    "entryData":[
        {
            "id":1,
            "version":0,
            "name":"Default Station"
        },
        {
            "id":2,
            "version":3,
            "name":"Default Station 1"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我在我的一次尝试中获得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')
Run Code Online (Sandbox Code Playgroud)

但结果是entryData被评估为一个字符串,引号被转义:

{
"totalPages": 1, 
"currentPage": 1, 
"entryData": "[{\"pk\": 1, \"model\": \"satview.groundstation\", ....
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样的事情:

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')
Run Code Online (Sandbox Code Playgroud)

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

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

在此先感谢Marco

ale*_*cxe 6

您可以使用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')
Run Code Online (Sandbox Code Playgroud)

虽然我更喜欢使用django电池中包含的:django.core.serializers,但是,因为你有一个自定义的json响应,model_to_dict()似乎是要走的路.

这里还有其他选项(比如使用values_list()):