使用Django在Python中将Model.Objects.all()转换为JSON

bel*_*ums 6 python django json

我有一个相同模型类型的对象列表。我想遍历此列表并创建一个JSON以发送回去。我尝试了2维数组,谷歌(Google)等东西,但找不到类似的东西?虽然我认为这并不困难。

我的代码现在是:

def get_cashflows(request):

        response_data = {}
        cashflow_set = Cashflow.objects.all();
        i = 0;
        for e in cashflow_set.iterator():
            c = Cashflow(value=e.value, date=str(e.date));
            response_data[i] = c;

        return HttpResponse(
            json.dumps(response_data),
            content_type="application/json"
        )
Run Code Online (Sandbox Code Playgroud)

这里不可能在json.dumps中给出模型。但是我如何给它多一个对象呢?

错误:

TypeError: coercing to Unicode: need string or buffer, float found
[08/Sep/2016 14:14:00] "GET /getcashflow/ HTTP/1.1" 500 85775
Run Code Online (Sandbox Code Playgroud)

Gil*_*dad 7

通常是这样的:

#view: 
from django.core import serializers

def get modelAPI(request):
    SomeModel_json = serializers.serialize("json", SomeModel.objects.all())
    data = {"SomeModel_json": SomeModel_json}
    return JsonResponse(data)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见Django文档。

  • serializers.serialize 只会解析为字符串而不是真正的 JSON (3认同)
  • @davidvalentino 之后尝试一下:`struct = json.loads(SomeModel_json)` (2认同)

jus*_*ile 3

正如 @Ivan 提到的,如果你想要一个 API 层,DRF 可以开箱即用,但如果你只想要一个基本视图来返回一些 json 而不需要配置新包的开销,那么使用 django 的序列化器这应该是一个相当简单的操作:

from django.core import serializers

def get_cashflows(request):

    response_data = {}
    cashflow_set = Cashflow.objects.all();
    i = 0;
    for e in cashflow_set.iterator():
        c = Cashflow(value=e.value, date=str(e.date));
        response_data[i] = c;

    return HttpResponse(
        serializers.serialize("json", response_data),
        content_type="application/json"
    )
Run Code Online (Sandbox Code Playgroud)

即使默认的 json 序列化程序不能完全满足您的需要,文档也很好地说明了如何实现这一点

https://docs.djangoproject.com/en/1.10/topics/serialization/#serialization-formats-json

还要注意的是:

您可以直接使用查询集serializers.serialize("json", Cashflow.objects.all())

而且你也没有i在循环中增加......