Django REST フレームワークのネストされたシリアライザーによる外部キーの割り当て
Django REST フレームワーク (DRF) は、外部キー関係を管理する便利な方法を提供します。シリアル化されたデータ。ただし、ネストされたシリアライザーで望ましい動作を得るのは難しい場合があります。
ネストされたシリアライザーでの外部キーの割り当て
ネストされたシリアライザーは、親シリアライザーの動作を継承します。デフォルトでは、外部キーの直接割り当てや変更は許可されていません。これを解決するための一般的なアプローチは、外部キーの ID に追加フィールドを指定することです。ただし、これにより、フロントエンド開発があいまいになる可能性があります。
代替ソリューション
1.カスタム to_representation() メソッド:
1 つの解決策は、親シリアライザーの to_representation() メソッドをオーバーライドすることです。これにより、シリアル化された応答にカスタム データを含めることができます。
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
このアプローチにより、外部キーがネストされたシリアライザー オブジェクトとして表現され、同じキーを使用して作成と読み取りの両方が可能になります。
2.関連フィールド代替フィールド:
より一般的な解決策は、デフォルトの PrimaryKeyEveryone フィールドとは異なる動作をするカスタム シリアライザー フィールドを作成することです。
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def to_representation(self, instance): if self.serializer: return self.serializer(instance, context=self.context).data return super().to_representation(instance)
このフィールドでは、次の表現のシリアライザーを指定できます。外部キー。
OtherFieldAlternative フィールドの使用
OtherFieldAlternative フィールドは、次のように親シリアライザーで使用できます。
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
カスタム フィールドを使用する利点
以上がDjango REST フレームワークを使用してネストされたシリアライザーで外部キーの割り当てを効率的に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。