ホームページ  >  記事  >  バックエンド開発  >  Django REST フレームワークでネストされた外部キーを割り当てる方法: 簡略化されたアプローチ

Django REST フレームワークでネストされた外部キーを割り当てる方法: 簡略化されたアプローチ

Susan Sarandon
Susan Sarandonオリジナル
2024-11-25 13:17:15336ブラウズ

How to Assign Nested Foreign Keys in Django REST Framework: A Simplified Approach

ネストされた外部キーの割り当て: 簡略化されたアプローチ

質問

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。