Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django中的多态序列化对象_Python_Django_Django Orm - Fatal编程技术网

Python django中的多态序列化对象

Python django中的多态序列化对象,python,django,django-orm,Python,Django,Django Orm,我有以下对象继承模型 class Room: name = models.CharField(db_index=True, unique=True, max_length=255) status = models.CharField(default=RoomStatus.ACTIVE, max_length=256, null=True) members = models.ManyToManyField(User) last_activity = models.D

我有以下对象继承模型

class Room:
    name = models.CharField(db_index=True, unique=True, max_length=255)
    status = models.CharField(default=RoomStatus.ACTIVE, max_length=256, null=True)
    members = models.ManyToManyField(User)
    last_activity = models.DateTimeField(default=timezone.now)
而继承的模式是

class LeagueRoom(Room):
    league = models.ForeignKey(League, on_delete=models.CASCADE, null=True)
    location = models.ForeignKey(Location, on_delete=models.CASCADE, null=True)
    logo_url = models.CharField(max_length=1024, null=True)

相应的序列化程序如下所示:

class RoomSerializer(serializers.ModelSerializer):
    members = UserSerializer(read_only=True, many=True)

    class Meta:
        model = Room
        fields = ('id', 'name', 'status', 'members', 'created', 'modified', 'last_active')

我的问题是,我已经按照以下方式为用户获取了所有房间

rooms = user.room_set.order_by('-last_activity')
现在,我想根据房间类型序列化此数据。因此,我想遍历房间列表,而不是使用
RoomSerializer
,如果房间是ClubRoom,则使用
ClubRoomSerializer
LeagueRoomSerializer
。 我不确定如何从父对象确定子对象

有人能帮我吗

class RoomSerializer(serializers.Serializer):
    def to_representation(self, instance):
        if isinstance(instance, LeagueRoom)
            serializer_class = LeagueRoomSerializer
        elif isinstance(instance, ClubRoom):
            serializer_class = ClubRoomSerializer
        return serializer_class(instance=instance).data

queryset = user.room_set.order_by('-last_activity')
serialized = RoomSerializer(queryset, many=True).data
class ClubRoomSerializer(serializers.ModelSerializer):
    location = LocationSerializer(read_only=True)
    club = ClubSerializer(read_only=True)
    room = RoomSerializer(read_only=True)

    class Meta:
        model = ClubRoom
        fields = ('id', 'name', 'location', 'club', 'logo_url',
                  'status', 'room', 'created', 'modified',)
rooms = user.room_set.order_by('-last_activity')
class RoomSerializer(serializers.Serializer):
    def to_representation(self, instance):
        if isinstance(instance, LeagueRoom)
            serializer_class = LeagueRoomSerializer
        elif isinstance(instance, ClubRoom):
            serializer_class = ClubRoomSerializer
        return serializer_class(instance=instance).data

queryset = user.room_set.order_by('-last_activity')
serialized = RoomSerializer(queryset, many=True).data