JSONFieldを備えたDjangoモデルがある場合、Django Rest Frameworkを使用してそれをシリアライズおよびデシリアライズする正しい方法は何ですか?
私はすでにカスタムをクレート試してみたserializers.WritableField
とオーバーライドto_native
とfrom_native
:
from json_field.fields import JSONEncoder, JSONDecoder
from rest_framework import serializers
class JSONFieldSerializer(serializers.WritableField):
def to_native(self, obj):
return json.dumps(obj, cls = JSONEncoder)
def from_native(self, data):
return json.loads(data, cls = JSONDecoder)
しかし、を使用してモデルを更新しようとするpartial=True
と、JSONFieldオブジェクトのすべてのフロートが文字列になります。
Django Rest Framework> = 3.3を使用している場合、JSONFieldシリアライザーが含まれるようになりました。これが正しい方法です。
Django Rest Framework <3.0を使用している場合は、gzeroneの回答を参照してください。
DRF 3.0-3.2を使用していて、アップグレードできず、バイナリデータをシリアル化する必要がない場合は、次の手順に従ってください。
最初にフィールドクラスを宣言します。
from rest_framework import serializers
class JSONSerializerField(serializers.Field):
""" Serializer for JSONField -- required to make field writable"""
def to_internal_value(self, data):
return data
def to_representation(self, value):
return value
そして、フィールドをモデルに追加します
class MySerializer(serializers.ModelSerializer):
json_data = JSONSerializerField()
また、バイナリデータをシリアル化する必要がある場合は、いつでも公式リリースコードをコピーできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加