使用djang在python中将Model.Objects.all()转换为JSON

2024-10-03 02:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相同模型类型的对象列表。我想遍历这个列表并创建一个JSON发送回来。我试过一些东西,比如二维数组,谷歌,。。。但找不到这样的东西?尽管我觉得这不难。

我现在的代码是:

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"
        )

这里不可能在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

Tags: 对象模型json类型列表datadatevalue
2条回答

一般来说,就是这样做的:

#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)

更多信息请参见Django Documentation

正如@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"
    )

即使默认的json序列化程序不能完全满足您的需要,这些文档也对如何实现这一点进行了很好的分解

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

还要注意:

您可以直接使用querysetserializers.serialize("json", Cashflow.objects.all())

你也不会在循环中递增i。。。

相关问题 更多 >