Сохранение данных в редактируемой таблице в базу данных

У меня есть веб-приложение, бэкенд использует Django, а фронтенд - HTML5. Restful API (Django rest framework) используется для типов данных GET, PUT, POST и DELETE.

На HTML странице у меня есть редактируемая таблица, которая должна сохранять любое отредактированное содержимое в базу данных.

Как я могу этого добиться?

HTML5 страница:

            <table id="thisTable"  contenteditable='true' class="table table-bordered table-sm" width="100%" cellspacing="0" style="font-size: 1.0rem;"
               id="bk-table"
               data-toggle="table"
               data-toolbar="#toolbar"
               data-cookie="true"
               data-cookie-id-table="materialId"
               data-show-columns="true"
               data-show-refresh="true"
               data-show-fullscreen="true"
               data-show-export="true"
               data-height="650"
                {#                   data-sticky-header="true"#}
                {#                   data-sticky-header-offset-left="7em"#}
                {#                   data-sticky-header-offset-right="7em"#}
               data-click-to-select="true"
               data-id-field="id"
               data-show-footer="true"
               data-url="/api/materials/"
               data-query-params="queryParams"
               data-remember-order="true"
               data-pagination="true"
               data-side-pagination="server"
               data-total-field="count"
               data-data-field="results">
            <thead class="thead-dark" >
            <tr contenteditable='true'>
                <!--th  data-sortable="true" >ID</th-->
                <th data-field="courseCode"  data-formatter="renderCourse">Course Code</th>
                <th data-field="type">Course Type</th>
                <th data-field="school">School</th>
                <th data-field="discipline.name">Discipline</th>
                <th data-field="discipline.hop1">HOP Name</th>
                <th data-field="discipline.hop1_email">HOP Email</th>
                <th data-field="discipline.executive">Executive Name</th>
                <th data-field="discipline.executive_email">Executive Email</th>
            </tr>
            </thead>

        </table>

rest.py:

Когда пользователь делает какую-либо редакцию в редактируемой таблице фронтенда, данные, измененные пользователем, должны автоматически обновляться в базе данных. Как я могу этого добиться?

Отслеживайте редактируемое содержимое с помощью Mutation Observer. Каждый раз, когда происходит изменение, следует запускать функцию, которая запросом выбирает любые data-field.

Итак, при наблюдении изменений можно выполнить что-то вроде:

function callback() {

const table = document.getElementById("bk-table");
// data is mutable object, but you can't do `data =` again
const data = {};
for (const x of table.querySelectorAll("[data-field]")) {

data[x.dataset.field] = x.innerText;

}

// send the API call
fetch(url, etc.)

}

(() => {
const config = { characterData: true };
for (const nodes of document.getElementById("bk-table").querySelectorAll("[data-field]")) {

const observer = new MutationObserver(callback);

// Start observing the target node for configured mutations
observer.observe(node, config);

}

})();

Документация по наблюдателю мутаций: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

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