40

私は多くのフィールドを持つモデルを持っていますが、この問題のために必要なのはそれらのフィールドのうちの3つだけです。セットをシリアル化しようとすると.values、例外が発生します。

'dict'オブジェクトには属性'_meta'がありません

これは私のコードです:

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
4

5 に答える 5

48

他の人が言っているように、DjangoのシリアライザーはValuesQuerySetを処理できません。ただし、標準を使用してシリアル化し、を使用しjson.dumps()てValuesQuerySetをリストに変換することができますlist()セットにDecimalsなどのDjangoフィールドが含まれている場合は、 DjangoJSONEncoderを渡す必要があります。したがって:

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

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder)
于 2015-08-13T16:52:43.047 に答える
37

Djangoシリアライザーはクエリセットのみをシリアル化でき、オブジェクトvalues()ではなくクエリセットを返しValuesQuerySetます。したがって、の使用は避けてvalues()ください。values()むしろ、次のように、serializeメソッドで使用するフィールドを指定します。

たとえば、このSOの質問を見てください

objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))

を使用する代わりに、上記のようにのパラメータをobjectQuerySet.values('fileName','id')使用してこれらのフィールドを指定します。fieldsserializers.serialize()

于 2011-10-04T16:02:14.813 に答える
17

objectQuerySetからリストを作成します。

data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') )
于 2013-11-29T07:47:08.743 に答える
3

私の解決策、それはうまくいきます

from django.core.serializers import serialize
import json

permission_list = Permission.objects.all().order_by('-id')
permission_serialize= json.loads(serialize('json', permission_list))
return JsonResponse({'data': permission_serialize})
于 2019-12-07T14:59:13.257 に答える
2

キャストしてすべてのアイテムを口述し、json.dumpsを使用してjsonを作成します。

json.dumps([dict(item) for item in SomeModel.objects.all().values('id', 'title')])
于 2015-04-19T00:47:42.097 に答える