drf serializer 字首 get 是什麼? 如何傳遞引數?

ponponon發表於2023-04-30

在 DRF(Django Rest Framework)的 Serializer 中,以 get_ 開頭的方法是 Serializer Method Field 的方法名字首,用於自定義該欄位的值。

例如,如果你有一個 Serializer,裡面有一個 CharField 欄位,你可以透過定義一個以 get_ 開頭的方法來自定義該欄位的值。示例如下:

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    name = serializers.CharField()

    def get_name(self, obj):
        return obj['name'].strip()

在上面的例子中,get_name 方法接受一個 obj 引數,用於從傳遞的資料中獲取該欄位的值,並在返回之前執行 .strip() 方法。

你可以在 get_ 方法中接收傳遞給 Serializer 的資料,並透過該方法自定義欄位的值,例如從其他欄位中計算、格式化等。

要將引數傳遞到 Serializer Method Field 方法中,可以透過定義 Serializer Field 時的 source 引數進行傳遞。例如:

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    name = serializers.CharField(source='first_name')

    def get_name(self, obj):
        return obj['first_name'].strip()

在上面的例子中,name 欄位的值從 first_name 欄位中獲取,並在 get_name 方法中進行了處理。

參考: DRF doc: SerializerMethodField

相關文章