2016-09-08 4 views
1

同じモデルタイプのオブジェクトのリストがあります。私はこのリストを繰り返し、JSONを作成して送り返したいと思います。私は2次元配列、Googleのようなものをいくつか試しました...しかし、このようなものを見つけることができませんか?私はそれが難しいとは思えませんが。今djangoを使用してPythonでModel.Objects.all()を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でモデルを与えることはできません。しかし、どのように私はそれに1つのオブジェクトを与えるのですか?

エラー:

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

この目的のためにdjango restフレームワークがあります。コレクションをシリアライズできるシリアライザ(他にも多数あります)があります。また、機密データやさまざまな出力形式をフィルタリングするためにシリアル化するフィールドの選択も処理します。 – Ivan

答えて

0

@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シリアライザは非常にあなたが必要なものを行っていない場合でも、これを実現する方法のダウン良い休憩を持って

012また、注意すべき

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

をあなたが直接serializers.serialize("json", Cashflow.objects.all())

クエリセットを使用することができますし、また、あなたのループ内でiをインクリメントしていない...

+0

答えのためのThx!多くの助けになります!そして、おっと、私はおそらくいくつかの他のコードを削除する必要があります – belgiums

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) 

詳しくは012をご覧ください

関連する問題