2017-06-17 7 views
2

シリアライザに2つのSerializerMethodFieldがあります。それらのうちの1つがobj.somelist.count()を正常に返します。しかし、私はobj.somelist [0]を返す他のメソッドを要求しているところで、私はTypeError 'RelatedManager'オブジェクトを取得していますが、インデックス付けをサポートしていません。どんなアドバイスも大歓迎です。 はここにいくつかのコードです:Django Rest Framework SerializerMethodField TypeError: "'RelatedManager'オブジェクトはインデックス作成をサポートしていません"

class TripPlaceSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = TripPlace 
     fields = ('trip', 'place',) 


class StopSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = TripPlace 
     fields = ('place',) 
     depth = 1 


class TripSerializer(serializers.ModelSerializer): 
    stops = StopSerializer(read_only=True, many=True) 
    stops_count = serializers.SerializerMethodField() 
    car = CarSerializer(read_only=True, many=False) 
    origin = serializers.SerializerMethodField() 
    # final = serializers.SerializerMethodField() 

    class Meta: 
     model = Trip 
     fields = ('id', 'name', 'owner', 'car', 'stops_count', 'stops', 'origin',) 

    def get_stops_count(self, obj): 
     return obj.stops.count() 

    def get_origin(self, obj): 
     return obj.stops.first() 

答えて

1

obj.somelistは、基礎となる関係があるものは何でものためにRelatedManagerである、あなたは直接、インデックス、それをすることはできません。あなたは、最初のオブジェクトを取得するためにRelatedManagerfirstメソッドを呼び出す必要があります:

def get_origin(self, obj): 
    return obj.somelist.first() 

それともできインデックス(またはスライス)0は異なる別のインデックスを使用して、管理者のクエリセット:

def get_origin(self, obj): 
    return obj.somelist.all()[ind] 
+0

' '' .first() '' 'は最初の停止インスタンスを返しますが、今度は、TripSerializerがちょうど深さ1である場所とTripとの間の結合テーブルを表すモデルが、" TripPlace "タイプのObjectを返しています直列化できません。更新されたコード^。以前はうまくいきました。 – alirk

+0

@alirk申し訳ありませんが、答えが元の問題を解決した場合は、新しい質問をすることを検討することがあります。 –

+0

あなたの助けをありがとう:) – alirk

関連する問題