2017-05-19 5 views
1

はジャンゴでは、どのように私は(.values()で作成した)のdictオブジェクトを返すクエリセットをシリアライズんDjangoの1.10、私は次のクエリから取得したクエリセットシリアライズしようとしていて

events_in_period = Event.objects \ 
.filter(timestamp__gte=start_day, 
     timestamp__lte=end_day, 
     request__isnull=False, 
     name=EventType.COMPLETED) \ 
.annotate(date=TruncDay('timestamp')) \ 
.values('date') \ 
.annotate(completed_count=Count('id')) \ 
.order_by('date') 

を主なものは.values()ステートメントで、このステートメントはDjangoモデルインスタンスではなくdictを含むQuerySetを返します。

ので、それを

from django.core import serializers 
output = serializers.serialize('json', result) 

をシリアル化するには、次の呼び出しは次のエラーで失敗:私は簡潔にするためにそれらを必要とするよう.values()を省略せずにシリアライズに

AttributeError: 'dict' object has no attribute '_meta' 

任意の提案。

答えて

1

あなたはJSONへのdictオブジェクトをシリアル化したい場合は、あなたがjsonをインポートすることができ、

import json 
data = json.dumps(result) 

Djangoのシリアライザは、Djangoのモデルオブジェクトとクエリセットのためのものです。だからそれは_メタフィールドを探しているのです。

+0

さらに、 'dict'にJSON非シリアル化可能型(' datetime'など)が含まれている場合は、それらを変換する必要があります。または、[jsonplus](https://pypi.python.org/pypi/jsonplus)のようなライブラリを使用して、かゆみを傷つけるために作成しました。 – randomir

関連する問題