私はジャンゴ残りのフレームワークを使用して、ちょうどこのような単純なシリアライザ作成しています:私はこのエラーを取得するしかしidフィールド
を
KeyError at /cerberus/packages/
'id'
私ができる来るどのように」シリアル化されたデータの一部としてプライマリキー 'id'を取得しますか?助けてくれてありがとう!
私はジャンゴ残りのフレームワークを使用して、ちょうどこのような単純なシリアライザ作成しています:私はこのエラーを取得するしかしidフィールド
を
KeyError at /cerberus/packages/
'id'
私ができる来るどのように」シリアル化されたデータの一部としてプライマリキー 'id'を取得しますか?助けてくれてありがとう!
HyperlinkedModelSerializer
デフォルトではid
は含まれていません。 2.2およびそれ以前では、フィールドとして明示的に追加する必要があります...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field()
class Meta:
model = Package
fields = ('id','url', 'title','location')
以降2.3から、あなたは、単にfields
オプションに「ID」を追加することができます...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Package
fields = ('id','url', 'title','location')
以降3.xのからあなたがfields
オプションを使用して明示的に追加しないようにしたい場合は、あなたがReadOnlyField()
代わりのField()
を使用する必要があります...
class PackageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Package
私はちょうどTWEAこれはもう少しプラグイン可能なこのクラスを作成することによって、それにするためにヒツジシラミバエ:
はclass HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer):
"""Extend the HyperlinkedModelSerializer to add IDs as well for the best of
both worlds.
"""
id = serializers.ReadOnlyField()
はその後、ちょうどあなたのシリアライザを作るためにそれを使用して、あなたはあなたの方法にしています。
このヒントは、rest_framework [link](http://www.django-rest-framework.org/tutorial/1-serialization#using-modelserializers)のチュートリアルで私を助けました。チュートリアルでは 'pk = serializers.Field()'という行がありますが、 'id = serializers.Field()'でなければなりません。私はそのタイプミスを監督しました。 – Semo
これで、Django Rest Framework 3.xの 'id = serializers.ReadOnlyField()'になるはずです – rrauenza
ありがとうございました! –