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)
通常是这样的:
#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文档。
正如 @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在循环中增加......