只在 GET 上序列化,而不是在 POST Django REST 框架上序列化



我只希望AnchorSerializer()对GET请求进行序列化,以便它返回序列化的对象作为响应。在创建AnchorToUser对象的 POST 请求中,需要整数。

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'
        )

也许你可以为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

不确定自 2016 年以来这是否发生了变化,但我必须这样设置我的观点才能正常工作;

def get_serializer_class(self):
    if self.action == 'create':
        return AnchorToUserPostSerializer
    return AnchorToUserGetSerializer

最新更新