簡體   English   中英

重命名DRF序列化器字段

[英]Renaming DRF serializer fields

我正在使用DRF序列化程序來驗證從JSON API檢索的傳入數據。 我正在嘗試從響應中重命名一些笨拙的命名字段,以便更輕松地在代碼中進一步使用serializer.data

從API接收的數據如下所示:

{"FunnyNamedField": true, "AnotherWeirdField": false}

和處理代碼:

resp = requests.get([...])
resp.raise_for_status()
ser = MyFunnyDataSerializer(data=resp.json())
if ser.is_valid():
    do_domething_with(ser.data)

我希望序列化程序將傳入的字段名稱轉換為更簡潔的名稱。 ser.data可能類似於: {'funny': True, 'weird': False}

我嘗試了但未能如我所願的:

class MyFunnyDataSerializer(serializers.Serializer):
    funny = serializers.Booleanfield(source='FunnyNamedField')

有什么方法可以實現而無需恢復為SerializerMethodField

您可以重寫BaseSerializer來實現此目的:

from rest_framework import serializers

class CustomSerializer(serializers.BaseSerializer):

    def to_representation(self, instance):
        return {
            <datas>
        }

您可以使用自定義方法對實例序列化進行一些特定的修改。

另一種解決方案是為一個字段編寫自己的驗證器: Field Validator Method

因此,在此文檔示例中,您可以在返回值之前修改值。

from rest_framework import serializers

class BlogPostSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=100)
    content = serializers.CharField()

    def validate_title(self, value):
        """
        Check that the blog post is about Django.
        """
        if 'django' not in value.lower():
            raise serializers.ValidationError("Blog post is not about Django")
        if value == "something":
            value = "something_else"
        return value

希望能幫助到你。

暫無
暫無

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

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