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 отправленной страницы в «первозданное» состояние при возвращении ответа?

Возможно, что я совершенно не прав в своей конструкции. Я открыт для любых предложений по упрощению обработки.

Заранее спасибо.

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