Фильтрация в сериализаторах Django rest framework

В моем проекте комната имеет различные статусы, например: зарегистрирован, доступен, каждый статус имеет дату начала, мне нужно получить дату начала_даты, когда статус зарегистрирован. Как я могу сделать это в сериализаторе? Заранее спасибо!

в model.py:

 class RoomStatus(models.Model):
  room = models.ForeignKey(Room, on_delete=models.DO_NOTHING, related_name='rooms')

  class RoomStatusChoices(models.IntegerChoices):
    REGISTERED = 1
    RESERVED = 2
    AVAILABLE = 3


  room_status = models.SmallIntegerField(choices=RoomStatusChoices.choices, default=RoomStatusChoices.AVAILABLE)
  start_date = models.DateTimeField(default=timezone.now())

В serializers.py:

 class RoomStatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = RoomStatus
        fields = ['id', 'start_date']

 class RoomSerializer(serializers.ModelSerializer):
  rooms = RoomStatusSerializer(many=True)

   class Meta:
     model = Room
     fields = ['id', 'rooms']   

в файле views.py:

 class RoomViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet, UpdateModelMixin):
   queryset = Room.objects.all()
   serializer_class = RoomSerializer

Если я правильно понял, вы можете сделать что-то вроде этого:

Однако важные замечания:

  • Вы должны обработать случай, когда RoomStatus с room=pk или status=1 не существует.
  • Если ваша модель RoomStatus не имеет уникального ограничения для room и room_status, вы должны обработать случай, когда возвращается несколько объектов, что вызовет ошибку при использовании .get()
  • .
from .models import RoomStatus

class RoomSerializer(serializers.ModelSerializer):
    register_date = serializers.SerializerMethodField()

    def get_register_date(self, obj):
        return RoomStatus.objects.get(room=obj.pk, room_status=1).start_date

Вернуться на верх