簡體   English   中英

僅在 GET 而非 POST Django REST Framework 上序列化

[英]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'
        )

也許您可以為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM