Django rest не показывает ошибку списка в соответствующем индексе

У меня есть сервис, который принимает список с датами. Я намеренно отправляю список, который имеет ошибку с индексом 1. Ошибка должна быть возвращена как массив, который имеет 1. индекс, но он возвращается как показано ниже.

Поле dates является RelatedField и many=True

post_data=["2020-01-01","a"]

Ожидаемый ответ на ошибку;

    'dates': {
        '1': {
            ['Incorrect format. Expected iso format.']
        }
    }

Реальный ответ на ошибку;

      'dates': ['Incorrect format. Expected iso format.']

models.py

class EventModel(models.Model):
    title = models.CharField(max_length=100, null=False, blank=False)
    address = models.CharField(max_length=255, null=False, blank=False)

    def __str__(self):
        return self.title


class EventDateTimeModel(models.Model):
    date_time = models.DateTimeField(null=False, blank=False)
    event = models.ForeignKey('EventModel', on_delete=models.CASCADE, related_name='dates')

    def __str__(self):
        return self.date_time.isoformat()

serialziers.py

class DateTimeReleatedField(serializers.RelatedField):
    default_error_messages = {
        'incorrect_type': 'Incorrect format. Expected iso format',
    }

    def to_internal_value(self, data):
        try:
            if not isinstance(data, str):
                raise TypeError
            return datetime.fromisoformat(data) # str to datetime object in post data
        except (TypeError, ValueError):
            self.fail('incorrect_type', data_type=type(data).__name__)

    def to_representation(self, value):
        return str(value) # using "EventDateTimeModel" model's __str__() method



class EventSerializer(serializers.ModelSerializer):
    dates = DateTimeReleatedField(many=True, queryset=EventDateTimeModel.objects.all(), required=True)


    class Meta:
        model = EventModel
        fields = ['id', 'title', 'address', 'dates']


    def create(self, validated_data):
        dates = validated_data.pop('dates', None)

        with transaction.atomic():
            instance = super().create(validated_data)

            if dates:
                for date_time in dates:
                    EventDateTimeModel.objects.create(date_time=date_time, event=instance)

        return instance

    def update(self, instance, validated_data):
        dates = validated_data.pop('dates', None)

        with transaction.atomic():
            instance = super().update(instance, validated_data)


            if dates:
                for date_time in dates:
                    EventDateTimeModel.objects.update_or_create(date_time=date_time, event=instance)
                        

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