django rest 框架:<object> 不是 JSON 可序列化

django rest framework: <object> is not JSON serializable

我已经安装了 'us' 模块 (https://pypi.python.org/pypi/us) 来获取美国各州。它打印状态列表。我想用以下格式在 API 中显示它。

{
    "states": [
        {
            "state_code":"CA",
            "state_name":"California"
        },
        {
            "state_code":"AL",
            "state_name":"Alabama"
        }
    ]
}

现在显示以下错误。

TypeError at /api/v1/us/states
<State:Alabama> is not JSON serializable

views.py

@api_view(['GET'])
def get_all_states(request):
    states = us.states.STATES
    print (states)
    return Response({'states':states})

当我打印状态时,它具有以下格式。

[<State:Alabama>, <State:Alaska>, <State:Arizona>, <State:Arkansas>, <State:California>, <State:Colorado>, <State:Connecticut>, <State:Delaware>  <State:West Virginia>, <State:Wisconsin>, <State:Wyoming>]

urls.py

urlpatterns = [
    url(r'^us/states', get_all_states),
]

我没有为此使用任何序列化程序。有没有办法遍历状态并获取格式化的状态数据?

当您在响应中 return 一个 dict 时,django 将其视为 return 并将其作为 application/json 内容类型的响应。它使用 json 库对其进行序列化。 dict 是可序列化的,但 State 对象不是。你需要自己给它充气。像这样。

@api_view(['GET'])
def get_all_states(request):
    states = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]
    print (states)
    return Response({'states': states})

由于您只需要某种静态数据,因此缓存它始终是个好主意。或者给它充气一次,这样它就不会在每次请求时重复。

US_STATES = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]

@api_view(['GET'])
def get_all_states(request):
    return Response({'states': US_STATES})

编码愉快。