django - 将序列化器输出获取到另一个序列化器

问题描述 投票:0回答:1

我想将一个序列化器“RoomSerializer”的输出获取到“JoinRoomSerializer”的字段中。

我尝试将“RoomSerializer”作为变量放入“JoinRoomSerializer”中,然后将其传递到“字段”中,但出现以下错误:尝试在序列化器上获取字段

room_extends
的值时出现 AttributeError
 JoinedRoomSerializer
。 序列化器字段可能命名不正确,并且与
UserRoom
实例上的任何属性或键不匹配。 原始异常文本是:“UserRoom”对象没有属性“room_extends”。

Room 模型有字段名称,JoinRoom 模型有房间的外键

我的序列化器:

class RoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying all fields of the Room"""

    class Meta():
        model = Room
        fields = ['name']


class JoinedRoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying the following fields of the joined UserRoom table"""
    room_extends = RoomSerializer(many=True)

    class Meta():
        model = UserRoom
        fields = ['room_extends', 'date_joined']
django django-serializer
1个回答
0
投票

您正在使用

ModelSerializer
,因此您必须在 Meta 类中指定模型具有的字段。我几乎可以肯定,在您的情况下,外键字段未命名为room_extends,这种情况下会出现错误

class RoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying all fields of the Room"""

    class Meta():
        model = Room
        fields = ['name']


class JoinedRoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying the following fields of the joined UserRoom table"""
    room = RoomSerializer(many=True) # name of variable same as in UserRoom model

    class Meta():
        model = UserRoom
        fields = ['room', 'date_joined']

或者您可以使用

source

class RoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying all fields of the Room"""

    class Meta():
        model = Room
        fields = ['name']


class JoinedRoomSerializer(serializers.ModelSerializer):
    """Serializer for displaying the following fields of the joined UserRoom table"""
    room_extends = RoomSerializer(many=True, source='room') # room or whatever is foreignkey field name

    class Meta():
        model = UserRoom
        fields = ['room_extends', 'date_joined']
© www.soinside.com 2019 - 2024. All rights reserved.