Django Rest Framework SerializerMethodField TypeError:““RelatedManager”对象不支持索引”

2024-09-26 18:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个序列化程序上有两个serializerMethodField。其中一个回来了对象somelist.count()很好。但我要求另一种方法返回目标人物列表[0]我收到一个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()

Tags: 对象trueobjfieldsmodelcountplaceorigin
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:43

obj.somelistRelatedManager,因为不管底层关系是什么,都不能直接索引它。您应该调用RelatedManagerfirst方法来获取第一个对象:

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

或者,您可以使用不同于0的不同索引索引(或切片)管理器的查询集:

^{pr2}$

相关问题 更多 >

    热门问题