У меня есть следующая модель наследования объектов.
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')
Теперь я хочу сериализовать эти данные в зависимости от типа комнаты. Таким образом, вместо использования RoomSerializer
я хочу просмотреть список комнат, и если комната - ClubRoom, тогда используйте ClubRoomSerializer
или LeagueRoomSerializer
.
Я не уверен, как определить дочерний объект от родительского.
Может ли кто-нибудь помочь мне с этим.