2016-05-21 7 views
1

私はAnchorSerializer()をGETリクエストでシリアル化して、シリアル化されたオブジェクトをレスポンスとして返すようにします。 AnchorToUserオブジェクトの作成時にPOST要求で整数が必要です。GETでシリアル化のみPOST Django REST Framework

class AnchorToUserSerializer(serializers.ModelSerializer): 
    # Add the username from the user object relation. 
    user = serializers.ReadOnlyField(source='user.username') 
    # Serialize the nested anchor. 
    anchor = AnchorSerializer() # Should only be used with GET. 
    class Meta: 
     model = AnchorToUser 
     fields = (
      'anchor', 
      'user', 
      'created_at' 
     ) 

答えて

2

たぶん、あなたはGETPOSTに異なるシリアライザを使用することができます。

class AnchorToUserGetSerializer(serializers.ModelSerializer): 
    user = serializers.ReadOnlyField(source='user.username') 
    anchor = AnchorSerializer(read_only=True) # only used for serialization 

    class Meta: 
     model = AnchorToUser 
     fields = ('anchor', 'user', 'created_at') 


class AnchorToUserPostSerializer(serializers.ModelSerializer): 
    user = serializers.ReadOnlyField(source='user.username') 
    anchor = serializers.IntegerField(write_only=True) # accept integer values 

    class Meta: 
     model = AnchorToUser 
     fields = ('anchor', 'user', 'created_at') 

使用するシリアライザを決定するには、get_serializer_class()メソッドをオーバーライドできます。あなたの意見やビューセットで

、あなたのような何かを行うことができます。

def get_serializer_class(self): 
    if request.method == 'POST': 
     return AnchorToUserPostSerializer 
    return AnchorToUserGetSerializer 
関連する問題