Как "сохранить и продолжить редактирование" задачи в django-viewflow
Я строю рабочий процесс утверждения, используя django-viewflow и django-material.
Ключевым компонентом рабочего процесса является заполнение конечным пользователем длинной формы и ее отправка на рассмотрение и утверждение.
Что я хочу
Мои пользователи будут ожидать возможности сохранения и продолжения редактирования, так что они смогут заполнить форму наполовину, сохранить свой прогресс и вернуться позже, чтобы завершить заполнение формы. Только после этого они захотят отправить форму.
Это стандартная функция в админке Django.
Что я нашел
В шаблоне task.html по умолчанию django-viewflow предлагает две кнопки отправки (source):
<button type="submit" name="_continue" class="btn btn-flat">{% trans 'Done and continue on this process' %}</button>
<button type="submit" name="_done" class="btn primary white-text">{% trans 'Done' %}</button>
Официальная документация довольно скудна на разницу между этими двумя задачами.
"Выполнить и продолжить" отмечает текущую задачу как выполненную и активирует следующую задачу (что я как пользователь хочу делать по умолчанию, кроме "сохранить и продолжить редактирование").
"Done", похоже, отмечает текущую задачу как выполненную, но не переходит к следующей задаче, которая требует некоторого неудобного самоназначения для продолжения. Я вижу, как пользователь может запутаться в этом.
Что я пробовал
Я прочитал документацию по viewflow, особенно по активации, но не смог найти объяснения по _continue
в сравнении с _done
.
Исследуя кодовые базы django-viewflow (включая frontend) и django-material, я нашел шаблон flow.html
. На _continue
ссылаются tasks.py
и utils.py
. На _done
не ссылается нигде, что я смог найти.
flow/view/utils.py
(source), похоже, указывает на следующую задачу (если таковая назначена пользователю) по завершении задачи.
Я вижу выпуск viewflow GH от 2016 года, посвященный этому. предоставляя пример миксина (кредиты GH @codingjoe):
class SavableViewMixin:
@Activation.status.transition(source=STATUS.PREPARED, target=STATUS.ASSIGNED)
def save_task(self):
self.task.save()
def activation_done(self, *args, **kwargs):
if '_save' in self.request.POST:
self.save_task()
else:
self.done()
def message_complete(self):
if '_save' not in self.request.POST:
super(SavableViewMixin, self).message_complete()
def get_success_url(self):
if '_save' in self.request.POST:
return self.request.get_full_path()
return super(SavableViewMixin, self).get_success_url()
В вопросе также упоминается удаленный пример "viewflow_pause" в книге рецептов.
Где я застрял
Существует ли канонический способ предоставить кнопку "сохранить и продолжить редактирование" для каждой задачи? Пример "viewflow_pause" еще где-то существует?