DRF v3.1では、ドキュメントに詳細が記載されているものとよく似たネストされたシリアライザーがあります -http://www.django-rest-framework.org/api-guide/serializers/#ネストされたオブジェクトの処理
class SerializerA(serializers.Serializer):
details = DetailsSerializer(required=False)
ただし、このシリアライザーを使用しようとして詳細を指定しないと、次のメッセージが表示されます。
{u'details': [u'This field may not be null.']}
ドキュメントを見るとこれは間違っているように思えますか?
他にこれに遭遇した人はいますか、またはこれがバグであることを確認できますか?
ベストアンサー1
わかりました。Kevin Browns のコメントは正しいです。allow_null=True を追加する必要がありました。
class SerializerA(serializers.Serializer):
details = DetailsSerializer(required=False, allow_null=True)
その理由は、required=False にすると、シリアライザーを構築するときにフィールドの詳細がデータから欠落する可能性があるためです。
例えばs = SerializerA(data={})
一方、allow_null では、パラメータの指定は許可されますが、null になることができます。
例えばs = SerializerA(data={'details': None})
これにより、DRF Browsable API に関する別の問題が発生しますが、それについては別の質問で尋ねます。