我想将一个序列化器“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']
您正在使用
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']