Django: как сбросить URL страницы в ответе на пост?
Context
Страница отображает список записей (из БД), где некоторые столбцы являются редактируемыми. Одна «ячейка» должна содержать сумму. Макет выглядит примерно так:
+----+-------+--------+--------+--------+---------------+
| id | name | Price |Packing |Shipping| Total fees |
+----+-------+--------+--------+--------+---------------+
| 32 | Name1 | 150.25 | (0.00) | (1.00) | <Update> 0.00 | <Save>
| 47 | Name2 | 57.16 | (0.50) | (1.00) | <Update> 0.00 | <Save>
+----+-------+--------+--------+--------+---------------+
<Cancel> <Approve>
где (...) обозначает поле ввода, а <...> - кнопку.
Цель состоит в том, чтобы иметь возможность вручную переопределять то, что приходит из БД, и, в случае если строка не «одобрена» для следующего шага рабочего процесса, сохранять переопределения в БД для последующей проверки.
<Update>
кнопка вычисляет сумму сборов. Возможно, это следует сделать с помощью JavaScript, локально в клиенте.
<Save>
требует транзакции POST. Кнопка имеет formaction=
для возврата идентификатора ряда, чтобы определить, какой заказ обрабатывать. Это означает, что URL-адрес имеет вид http://host/app/save/<rowid>, а страница изначально запрашивается по адресу http://host/app.
«Легко» справиться с этим в urls.py:
urlpatterns=[
path('app', MyView.as_view(), name='current_list'),
path('app/save/<id>', MyView.as_view(), name='patch_entry'),
]
При нажатии клавиши <Save>
, post()
получает всю необходимую информацию для обработки запроса. Но если в ответ отправляется render()
, то URL страницы, отображаемый браузером, становится http://host/app/save/<rowid>.
Если нажата другая кнопка <Save>
, браузер посылает запрос http://host/app/save/save/<rowid>, который, очевидно, не работает. Аналогично, если нажата кнопка <Approve>
, отправляется запрос http://host/app/save/, который не соответствует шаблону и не работает.
Вопрос
Похоже, что ответ должен быть возвращен в виде редиректа. Мне не нравится эта идея, потому что она вызывает новый GET, который, в свою очередь, приводит к новому запросу к БД, хотя вся информация уже была обработана.
Есть ли способ «сбросить» URL отправленной страницы в «первозданное» состояние при возвращении ответа?
Возможно, что я совершенно не прав в своей конструкции. Я открыт для любых предложений по упрощению обработки.
Заранее спасибо.