Serializing где делает дополнительный запрос в бд?

мои model

class Chat(models.Model):
    client = models.BigIntegerField(verbose_name='ID клиента')
    operator = models.BigIntegerField(verbose_name='ID оператора')
    data = models.DateTimeField(auto_now_add=True)
    works = models.BooleanField(default=True)
    stopped = models.BooleanField(default=False)
    ticket = models.ForeignKey(Ticket, related_name='chat', on_delete=models.CASCADE, verbose_name='№ Тикета')

    def __str__(self):
        return '№' + str(self.id)


class Message(models.Model):
    user_id = models.BigIntegerField(verbose_name='ID отправителя')
    text = models.CharField(max_length=1000, verbose_name='Текст сообщения')
    chat = models.ForeignKey(Chat, related_name='message', on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    data = models.DateTimeField(auto_now_add=True, verbose_name='Время создания', editable=True)

    def __str__(self):
        return str(self.user_id)

мой serializers

class ChatSerializers(serializers.ModelSerializer):
    ticket = serializers.CharField()

    class Meta:
        model = Chat
        fields = ['client', 'operator', 'id', 'works', 'stopped', 'ticket', 'message']
        read_only_fields = ['message']
        depth = 1

    def create(self, validated_data):
        ticket_number = validated_data.pop('ticket')
        ticket = Ticket.objects.get(number=ticket_number)
        chat = Chat.objects.create(ticket=ticket, **validated_data)
        return chat

    def update(self, instance, validated_data):
        if 'works' in validated_data:

            instance.works = validated_data['works']
            if validated_data['works'] is False:

                instance.stopped = False
                for message in self.data['message']:
                    update_messages = Message.objects.filter(id=message['id']).update(read=True)
            instance.save()
            return instance

        elif validated_data.get('stopped', None) is False:

            instance.stopped = False
            for message in self.data['message']:
                update_messages = Message.objects.filter(id=message['id']).update(read=True)
            instance.save()
            return instance

        chat = super().update(instance, validated_data)
        return instance

мой ViewSet

class ChatViewSet(ModelViewSet):
    queryset = Chat.objects.prefetch_related(Prefetch('message', queryset=Message.objects.filter(read=False)))
    serializer_class = ChatSerializers
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['works', 'stopped']

явно указал какие данные нужно загружать и использовать

queryset = Chat.objects.prefetch_related(Prefetch('message', queryset=Message.objects.filter(read=False)))

когда делаю GET запрос. получаю ожидаемый результат

{
  "client": 11111111,
  "operator": 2222222,
  "id": 123,
  "works": true,
  "stopped": false,
  "ticket": "4",
  "message": [
    {
      "id": 5,
      "user_id": 11111111,
      "text": "Thh",
      "read": false,
      "data": "2022-07-06T19:18:35.132298+03:00",
      "chat": 123
    },
    {
      "id": 6,
      "user_id": 11111111,
      "text": "Gh",
      "read": false,
      "data": "2022-07-06T19:18:36.443032+03:00",
      "chat": 123
    }
  ]
}

когда делаю PATCH {"works": false} или {"stopped": false} запрос. получаю ожидаемый результат

{
  "client": 11111111,
  "operator": 2222222,
  "id": 123,
  "works": false,
  "stopped": false,
  "ticket": "4",
  "message": [
    {
      "id": 5,
      "user_id": 2222222,
      "text": "Thh",
      "read": false,
      "data": "2022-07-06T19:18:35.132298+03:00",
      "chat": 123
    },
    {
      "id": 6,
      "user_id": 2222222,
      "text": "Gh",
      "read": false,
      "data": "2022-07-06T19:18:36.443032+03:00",
      "chat": 123
    }
  ]
}

Но когда я выполняю PATCH {"works": true} или {"stopped": true} он отправляет мне все связанные отношения message

{
  "client": 11111111,
  "operator": 2222222,
  "id": 123,
  "works": true,
  "stopped": false,
  "ticket": "4",
  "message": [
    {
      "id": 5,
      "user_id": 11111111,
      "text": "Thh",
      "read": true,
      "data": "2022-07-06T19:18:35.132298+03:00",
      "chat": 123
    },
    {
      "id": 6,
      "user_id": 11111111,
      "text": "Gh",
      "read": true,
      "data": "2022-07-06T19:18:36.443032+03:00",
      "chat": 123
    },
    {
      "id": 7,
      "user_id": 11111111,
      "text": "Vh",
      "read": true,
      "data": "2022-07-06T19:18:39.429679+03:00",
      "chat": 123
    },
    {
      "id": 8,
      "user_id": 11111111,
      "text": "G",
      "read": true,
      "data": "2022-07-06T19:18:40.792661+03:00",
      "chat": 123
    },
    {
      "id": 9,
      "user_id": 11111111,
      "text": "ewrwer",
      "read": true,
      "data": "2022-07-06T19:19:39.343431+03:00",
      "chat": 123
    }

В чем причина такого поведения? буду раз любой подсказке!

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