2015-10-08 9 views
5

ちょうどDjango Rest Frameworkに入っています。JSON出力にget_absolute_url値を含める

私は、モデルがREST APIを通して提示されている場所で簡単な例を実行しています。関連するフィールドはモデル内になく、文字列の束だけです。

そのモデルのget_absolute_url()の値をJSON出力に表示する最も簡単な方法は何ですか?

私はserializers.HyperlinkedModelSerializerを使用して、関連フィールドを持つより複雑なモデルに移行する準備をしています。

+0

私はこの[関連する投稿]で多くの答えを見つけました(http://stackoverflow.com/questions/18396547/django-rest-framework-adding-additional-field-to-modelserializer) – SimonMorris

答えて

6

アプローチ-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は、そのドキュメントでこれを明示的に使用しているように私は第二のアプローチを使用してお勧めします。

+0

すばらしい答え - ありがとうそんなに – SimonMorris

関連する問題