2017-06-17 85 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