Как "сохранить и продолжить редактирование" задачи в 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" еще где-то существует?

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