@s_stepashka

Как передать изменённые данные таблицы в views.py?

В html выводится таблица из БД:
<table border="">
                                    <tr><th>Id</th><th>Наименование линии</th><th>Узел</th><th>Стык</th><th>Сварщик</th></tr>
                                        {% for line1 in full_lines_info_table %}
                                            <tr><td align="center">{{ line1.id }}</td>
                                                <td>{{ line1.name_of_line }}</td>
                                                <td align="center"><div contenteditable>{{ line1.uzel_number }}</div>
                                                </td>
                                                <td align="center"><div contenteditable>{{ line1.joint_number }}</div></td>
                                                <td align="center"><div contenteditable>{{ line1.welder }}</div></td>
                                                <td><a href="deletejoint/{{line1.id}}">Удалить</a></td>
                                                <td>
                                                    <form method="post" action="">
                                                        {% csrf_token %}

                                                        <p><input type="submit" formaction="/applychanges" value="Сохранить" >
                                                    </form>
                                                </td>
                                            </tr>
                                        {% endfor %}
                                </table>

Пользователь меняет любую contenteditable ячейку. Вопрос состоит в том, как по нажатию кнопки сохранить, передать во views.py данные для дальнейшего редактирования записи БД в функции /applychanges? Может есть другие предложения как организовать редактирование записи таблицы с последующим внесением изменений в БД?
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 2
@iddqda
network engineer, netdevops
наверняка в джанге есть какой то отдельный модуль наподобие flask-admin который сопоставит модель и представление.

а если делать тупо в лоб, то я бы тянул таблицу так же шаблоном, а данные в ячейки отдельным get запросом получал.
Этими данными инициализировать массив InitArr.
Склонировать InitArr в оперативный массив OperArr.
Все изменения в контенте в ячейках отражать в OperArr
При нажатии Submit сравнивать два массива и изменения пушить на сервер.
Если удачно клонировать OperArr в InitArr и так по кругу.

все это на JS разумеется
кнопку сохранить сделал бы одну на всю страницу
а по кнопке удалить можно просто прятать линию посредсвом css
Ответ написан
ArsenyMatytsyn
@ArsenyMatytsyn
Руководитель frontend направления, предприниматель
Я так понимаю проблема не в незнании того, как работает обработка пользовательского ввода в формы при работе с джангой. Посему:

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

Пункт первый в принципе совсем не обязательный, но так я вижу меньше кода из-за привязки к одному контейнеру всего месива. Да и глянь документацию своего JS-редактора, может быть там все это уже есть в виде готового решения и тебе придется только создать корректную прослойку между формой и бэком.

Ну или можешь оторваться от использования шаблонов Jinja и написать свое приложение на JS\JS-фреймворке, которое будет безе перезагрузок обмениваться данными с, API в лице твоей Django.

Как видишь, варианты есть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы