6

次の方法でオブジェクトをシリアル化QuerySetまたはDictオブジェクト化しようとしました。datetime.date

方法 #1:

json.dumps(MyModel.objects.values())

エラーが発生します:

例外値: [{'date': datetime.date(2012, 5, 26), 'time': datetime.time(0, 42, 27)}] は JSON シリアライズ可能ではありません

方法 2:

json.dumps(MyModel.objects.values(), cls=DjangoJSONEncoder)

エラーも発生します:

例外値: [{'date': datetime.date(2012, 5, 26), 'time': datetime.time(0, 42, 27)}] は JSON シリアライズ可能ではありません

方法 #3:

json.dumps(MyModel.objects.all(), cls=DjangoJSONEncoder)

例外値: [< MyModel: MyModel object>] is not JSON serializable

方法 #4:

serializers.serialize('json', MyModel.objects.all())

エラーが発生します:

例外値: 'str' オブジェクトには属性 '_meta' がありません

Djangoでdatetimeのフィールドを持つオブジェクトをJSONにシリアル化する方法は?

4

3 に答える 3

14

あなたの問題は日時とは何の関係もありません。DjangoJSONEncoder クラスを使用したり、values(). 日時フィールドがまったくないモデルでもまったく同じ結果が得られます。

Django でシリアル化を行う方法は、次を使用することserializersです。

from django.core import serializers
output = serializers.serialize('json', MyModel.objects.all())

しかし、出力形式が不必要に複雑であるため、それを避けようとしていることは間違いありません。代わりに、通常は「python」シリアライザーを使用して dict に変換してから、json にダンプします。

temp_output = serializers.serialize('python', MyModel.objects.all())
output = json.dumps(temp_output, cls=DjangoJSONEncoder)
于 2012-05-26T09:17:20.413 に答える
6

辞書を JSON にダンプするだけの場合は、json.dumps を使用してください。カスタムシリアライゼーションクラスを渡すことで、オブジェクトを簡単にシリアライズすることができます - Django には既に日付時刻を扱うものがあります:

from django.core.serializers.json import DjangoJSONEncoder
json.dumps(mydict, cls=DjangoJSONEncoder)
于 2013-12-01T08:23:04.480 に答える