2016-03-20 14 views
0

モデルデータをJSONにシリアル化するためにDjangoシリアライザを使用しています。
例: - 「タイプ」フィールドを1つ含むモデル(CHECKTYPE)があります。
'types'には、 'test、test1、test2'のようなカンマ(、)で区切られた項目が含まれています。Djangoシリアライザ - フィールド属性値の追加/更新

私は、以下の(view.pyでどこか)のようなDjangoのシリアライザを使用しています:

gettypes = CHECKTYPE.objects.all() 
mytypes = serializers.serialize("json", gettypes) 
return HttpResponse(mytypes, content_type="application/json") 

これは以下のようにWebページ上で私にJSONを返す:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2"}}] 

今ここに私がしたいですデータをシリアル化する前にfields属性を操作します。
例:「種類」をコンマで区切った場合、リストの最後のインデックスになるフィールドlasttypeに属性を1つ追加します。

lasttype = types.split(',')[-1] 

ので、最終的なJSONレスポンスは次のようになります。

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2", "lasttype":"test2"}}] 

私は以下のようにこれを実行しようとしたが、それは働いていない:

gettypes = CHECKTYPE.objects.all() 
updated_types = [] 
for mtype in gettypes: 
    mtype.lasttype = mtype.types.split(',')[-1] 
    updated_types.append(mtype) 
mytypes = serializers.serialize("json", updated_types) 
return HttpResponse(mytypes, content_type="application/json") 

しかし、これは動作しません。それは私に同じJSON応答を与え、 'lasttype'属性を表示していません。 これを達成する可能性がある場合は教えてください。

おかげで、
Shashank

答えて

0

あなたが送信している応答を改変するための最良の方法は、辞書を修正し、その後のdictするJSONをロードすることである、再びJSONはレスポンスのデータをダンプします。

0

シリアル化する前にフィールドを変更する代わりに、シリアル化した後にフィールドを変更する必要があります。再シリアライズdictまたはlistなしJsonResponseすることができます直接JSONデータを使用することにより

import json 
mytypes = json.loads(serializers.serialize("json", gettypes)) 
updated_types = [] 
for mytype in mytypes: 
    last_type = mytype['fields']['types'].split(',')[-1] 
    mytype['fields']['lasttype'] = last_type 
    updated_types.append(mytype) 
return JsonResponse(updated_types) 

予想されるデータは次のようにする必要があります:

'[{"pk": "xyz00000005", "model": "porttype.CHECKTYPE", "fields": {"lasttype": " test2", "types": "test, test1, test2"}}]' 
+0

感謝。これは私の問題を解決します(JsonResponseでリストを表示するにはsafe = Falseを追加する必要があります)。 –

+0

あなたは、必要に応じて答えを受け入れ可能とマークすることができます:) – v1k45

関連する問題