2017-09-05 9 views
1

を持っていない私はJSONオブジェクトとしてquerysetを渡ししようとしています:クエリセットをシリアル化:はAttributeError:「辞書」オブジェクトが属性「_meta」

structure=Fund.objects.all().values('structure').annotate(total=Count('structure')).order_by('-total') しかし、querysetsしたがってJson Serializableではありませんが、私は私のコードを変更しました: <QuerySet [{'total': 106, 'structure': 'Corp'}, {'total': 43, 'structure': 'Trust'}, {'total': 2, 'structure': 'OM'}, {'total': 0, 'structure': None}]>

+0

ANSERをここに:次のようにあなたはserialize()方法でvalues()で使用したいフィールドをspecifiyすることができますhttps://stackoverflow.com/a/9061105/1571826 –

+0

は 'only'のdidn使用して、すでにそれを試してみました仕事はありません。 – anderish

+0

{'thing':the_queryset}のようなトップレベルの辞書にクエリーセット(値dictまで切り捨て)を入れ、そのオブジェクトをシリアライズしてみてください。シリアライザでは、セキュリティのためリストのようなことをシリアル化することはできません。 – theWanderer4865

答えて

2

Djangoコアシリアライザでは、querysetしかシリアル化できません。しかし、values()は、ValuesQuerySetオブジェクトではなく、querysetを返しません。

from django.core import serializers 

funds = Fund.objects.all().annotate(total=Count('structure')).order_by('-total') 
structure = serializers.serialize('json', funds, fields=('structure',)) 
1

あなたはそれを試すことができます:

from django.core import serializers 


structure=serializers.serialize('json',Fund.objects.all().values('structure').annotate(total=Count('structure')).order_by('-total')) 

しかし、私はこのエラーを取得:AttributeError: 'dict' object has no attribute '_meta'、これが私のクエリセットです

import json 
from django.core.serializers.json import DjangoJSONEncoder 

qs = Fund.objects.values('structure').annotate(total=Count('structure')).order_by('-total') 
structure = json.dumps(list(qs), cls=DjangoJSONEncoder) 
関連する問題