我只希望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'
)
也许你可以为GET
和POST
使用不同的序列化程序。
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