Добавление аргумента в сериализатор

Делаю Канбан-доску и со страницы прилетают 2 аргумента по PATCH-запросу:

  • pk задачи
  • boardName - наименование доски на которую переместили задачу.

Поля boardName у меня в моделях нет, но есть аналог Status. Мне нужно обработать прилетевшие со страницы данные о задачи и в сериализатор отправить pk и дату (поле DateTime_schedule) чтобы обновить поле DateTime_schedule.

Пытался переопределить метод update в KanbanEProposalSerializer, но отладить его не могу, точка останова его не видит.

Смотрел много примеров и вот что написал. Подскажите мне пожалуйста: как обновить поле DateTime_schedule датой полученной из куска кода в partial_update().

serializers.py

class KanbanEProposalSerializer(serializers.ModelSerializer):
    class Meta:
        model = eproposals
        fields = '__all__'
        #('id', 'NumObject', 'AddressObject', 'Client_words', 'FaultAppearance', 'DescriptionWorks', # 'DateTime_schedule', 'DateTime_work', 'Status')

    def update(self, instance, validated_data):
        print('this-here')
        task_data = eproposals.objects.get(pk=instance.id)
        eproposals.objects.filter(pk=instance.id).update(**validated_data)
        return task_data

views.py

class KanbanEProposalViewSet(viewsets.ModelViewSet):
    serializer_class = KanbanEProposalSerializer

    def get_queryset(self):
     ....

    def partial_update(self, request, *args, **kwargs):
        request.data['DateTime_schedule'] = '2022-12-27'
        kwargs['partial'] = True
        pk = self.kwargs.get("pk")
        date_schedule = None
        board_name = request.data.get('boardName', None)
        task_data = eproposals.objects.get(pk=pk)
        currdate = datetime.now().date()
        if task_data.Status.Name == 'Принята' and board_name not in ['Завершено', 'Исполнено']:
            if board_name == 'Сегодня':
                date_schedule = currdate
            elif board_name == 'Завтра':
                date_schedule = currdate + timedelta(days=1)
            elif board_name == 'Понедельник':
                delta = 7 - currdate.isoweekday() + 1
                date_schedule = currdate + timedelta(days=delta)
        serialized = KanbanEProposalSerializer(request.user, data=request.data, partial=True)
        return Response(status=status.HTTP_202_ACCEPTED)

Ответы (1 шт):

Автор решения: Андрей Бондаренко

Сам задал и сам о нашел решение на основе другой статьи на данном сайте.

  1. Коментим def partial_update.
  2. Переносим код определения даты в update в serialiser.
  3. Добавляем Validate_data({'DateTime_schedule': date_schedule}) return super().update(instance, validated_data) И всё работает.
→ Ссылка