Я так понимаю проблема не в незнании того, как работает обработка пользовательского ввода в формы при работе с джангой. Посему:
1. Я бы на твоем месте обернул формой всю таблицу.
2. Создал форму на уровне бэка для вывода полями типа hidden (contenteditable к этой штуке привязан какой-то JS редактор, значит ему можно присвоить передачу в поля значения)
3. Ну и да, изначальные значения присваивать в поля тоже неплохо бы.
4. Итак, когда ты редактируешь с помощью JS редактора ячейки, значения которых попадают в input-ы, то по сабиту формы, они сами уйдут в обработчик.
Пункт первый в принципе совсем не обязательный, но так я вижу меньше кода из-за привязки к одному контейнеру всего месива. Да и глянь документацию своего JS-редактора, может быть там все это уже есть в виде готового решения и тебе придется только создать корректную прослойку между формой и бэком.
Ну или можешь оторваться от использования шаблонов Jinja и написать свое приложение на JS\JS-фреймворке, которое будет безе перезагрузок обмениваться данными с, API в лице твоей Django.
Как видишь, варианты есть.