使用django将Model.Objects.all()转换为python中的JSON

时间:2016-09-08 12:27:23

标签: python json django

我有一个相同型号的对象列表。我想迭代这个列表并创建一个JSON来发回。我尝试了一些像2-dim数组,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"
        )

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

错误:

TypeError: coercing to Unicode: need string or buffer, float found
[08/Sep/2016 14:14:00] "GET /getcashflow/ HTTP/1.1" 500 85775

3 个答案:

答案 0 :(得分:6)

这是一般的方法:

#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

答案 1 :(得分:1)

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

另请注意:

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

并且您也没有在循环中递增i ...

答案 2 :(得分:0)

这是一个项目,可以序列化(现在基于JSON)模型中的所有数据,并自动将它们放到特定目录中,然后可以在需要时反序列化...我已经为此序列化了数千条记录脚本,然后将它们全部加载回另一个数据库,而不会丢失任何数据。

任何对开源项目感兴趣的人都可以贡献这个项目并为其添加更多功能。

serializer_deserializer_model