为了账号安全,请及时绑定邮箱和手机立即绑定

在 Django 中多态序列化对象

在 Django 中多态序列化对象

潇潇雨雨 2021-08-11 21:55:40
我有以下对象继承模型。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 ClubRoom(Room):    club = models.ForeignKey(Club, 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')和class LeagueRoomSerializer(serializers.ModelSerializer):    location = LocationSerializer(read_only=True)    league = LeagueSerializer(read_only=True)    room = RoomSerializer(read_only=True)    class Meta:        model = LeagueRoom        fields = ('id', 'name', 'location', 'status', 'league',                  'logo_url', 'room', 'created', 'modified',)和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')现在我想根据房间类型序列化这些数据。因此,不是使用RoomSerializerI want 遍历房间列表,如果房间是 ClubRoom,则使用ClubRoomSerializeror else LeagueRoomSerializer。我不确定如何从父对象确定子对象。有人可以帮我弄这个吗。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号