Django REST フレームワークのモデル シリアライザーは、ID 整数のポストを許可することで外部キー関係を処理します。任務の目的のため。ただし、この動作をネストされたシリアライザーに拡張することは、特に既存のデータベース オブジェクトのみを割り当てる場合に課題が生じます。
すぐに使えるサポートがない場合は、次のことが可能です。親シリアライザーの to_representation() をオーバーライドして、ネストされた子データを含めます:
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
このアプローチは、シンプルで効果的なソリューションを提供します。ネストされた子を持つ親インスタンスの作成と読み取りの両方に使用します。
より一般的な処理のために、カスタム シリアライザー フィールドを利用できます。
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
これを定義することで、親シリアライザーのフィールドとシリアライザーを子シリアライザー クラスに設定すると、単一のシリアライザーを使用して外部キーの割り当てを実現できます。 key:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
この汎用メソッドの利点は、この動作を必要とする複数のシリアライザーに適用できることであり、それぞれのカスタム フィールドとメソッドの必要性が減ります。
以上がDjango REST フレームワークでネストされた外部キーを割り当てる方法: 簡略化されたアプローチの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。