[英]Only serialize on GET not POST Django REST Framework
我只希望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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.