Django Rest Framework SerializerMethodField TypeError:"' RelatedManager'对象不支持索引"

时间:2017-06-17 17:04:50

标签: python django django-rest-framework

我在序列化程序上有两个SerializerMethodFields。其中一个返回obj.somelist.count()就好了。但是我要求另一种方法返回obj.somelist [0]我得到一个TypeError' RelatedManager' object不支持索引。任何建议都非常感谢。 这是一些代码:

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 个答案:

答案 0 :(得分:2)

obj.somelist是基础关系的RelatedManager,您无法直接对其进行索引。您应该调用first的{​​{1}}方法来获取第一个对象:

RelatedManager

或者您可以使用与def get_origin(self, obj): return obj.somelist.first() 不同的不同索引来索引(或切片)管理器的查询集:

0