2017-02-04 7 views
1

私はカスタムシリアライザをいくつかの他のモデルシリアライザ、データフィールド、および多対多リレーションシップのためのいくつかのリストフィールドを持っています。ここに例があります。DRFでカスタムシリアライザを管理する最適な方法は何ですか

class CustomSerializer(serializers.Serializer): 
    a_model_serializer = AModelSerializer() 
    b_model_serializer = serializers.ListField(child=CModelSerializer()) 
    another_field = serializers.CharField() 

このシリアライザに基づいて、私はいくつかのモデルオブジェクトといくつかの多対多の関係を3番目のテーブルから作成する必要があります。今、この状況を管理する最善の方法は何でしょうか。

+0

方が良いネストされたフィールド – blueSurfer

+0

@blueSurferを操作するために 'SerializerMethodField'を使用することができますたぶん私はあなたが私の質問を理解していなかったと思います。この(CustomSerializer)シリアライザでは、いくつかのモデルインスタンスといくつかの多くの関係を作成する必要があります。次に、AModelSerializerインスタンスのIDを持つデータを返さなければならず、後でシリアライザの更新を管理する必要があります。 –

答えて

0

serializers.Serializerのcreate()関数をオーバーライドします。更新を管理するには、update()関数をオーバーライドします。

class CustomSerializer(serializers.Serializer): 
    a_model_serializer = AModelSerializer() 
    b_model_serializer = serializers.ListField(child=CModelSerializer()) 
    another_field = serializers.CharField() 

    def create(self, validated_data): 
     print(validated_data) 
     # Do your custom create 

    def update(self, instance, validated_data): 
     print(validated_data) 
     # Do your custom update 

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

+0

私はこのアプローチのために行くなら、どのように私はこのシリアライザをビューで使用し、どんな種類の便利でしょうか?最後に、作成方法と更新方法からどのように値を返しますか? –

+0

DRFを使用している場合、HTTP POSTまたはPUTリクエストをWebサーバーに送信すると、これらの関数が呼び出されます。指定したビューセットのURLに、データを使用して作成または更新するシリアライザ・クラスを呼び出す要求が送信されます。 – zubhav

関連する問題