2017-06-17 78 views
2

我有一個串行2個SerializerMethodFields。其中一個返回obj.somelist.count()罰款。但是,在我要求其他方法返回obj.somelist [0]我得到一個TypeError「RelatedManager」對象不支持索引。任何意見非常感謝。 下面是一些代碼:Django的REST框架SerializerMethodField類型錯誤:「‘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.somelistRelatedManager對於任何潛在的關係,你不能直接索引它。你應該叫RelatedManagerfirst方法來獲得的第一個對象:

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

或者你可以索引(或片)使用不同的不同的索引經理的查詢集從0

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

' ''.first()'''返回第一個停止實例,但是現在表示行程和地點之間的連接表的模型,這是StopSerializer的深度爲1的地方正在返回類型爲「TripPlace」的對象是不可序列化。更新的代碼^。之前它渲染得很好。 – alirk

+0

@alirk對不起朋友,如果答案解決了你原來的問題,你可以考慮問一個新問題。 –

+0

感謝您的幫助:) – alirk

相關問題