アプローチ-1 SerializerMethodField
の使用:
あなたがオブジェクトのシリアル化された表現にget_absolute_url()
値を追加するために、あなたのシリアライザでSerializerMethodField
を使用することができます。 SerializerMethodField
docs:
このあたりとして
は読み取り専用フィールドです。 のメソッドを呼び出して、その値を取得します。 のデータをオブジェクトのシリアライズされた表現に追加するために使用できます。
我々はシリアル化された表現にオブジェクトの絶対URLを追加します当社のシリアライザでmy_absolute_url
フィールドのための方法get_my_abslute_url()
を定義します。
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.SerializerMethodField() # define a SerializerMethodField
def get_my_absolute_url(self, obj):
return obj.get_absolute_url() # return the absolute url of the object
アプローチ-2 source
引数でURLField
を使用して:あなたはまた、URLField
を使用して、それに方法get_absolute_url
を渡すことができます
。これにより、メソッドget_absolute_url
が呼び出され、その値がシリアライズされた表現で返されます。 source
argument:
フィールドを移入するために使用される属性の名前にDRFドキュメントから
。 は URLField('get_absolute_url')
等のみself argument
をとる方法であってもよく、又はそのようなEmailField(source='user.email')
などの属性を横断するドット表記を使用してもよいです。
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.URLField(source='get_absolute_url', read_only=True)
DRFは、そのドキュメントでこれを明示的に使用しているように私は第二のアプローチを使用してお勧めします。
私はこの[関連する投稿]で多くの答えを見つけました(http://stackoverflow.com/questions/18396547/django-rest-framework-adding-additional-field-to-modelserializer) – SimonMorris