Как обсуждалось в комментариях к ответу dirkgroten, у меня есть step
в мастере форм, который formset
. Для этого конкретного шага использование self.storage.set_step_data(step, {})
приводит к ошибке каждый раз, когда используется step
или информация для step
, потому что, как указал dirkgroten в своих комментариях, информация для ManagementForm
отсутствует после ручной настройки данные для step
.
Поэтому я просто удаляю пару key
- value
для step
из self.storage
. Делая это, я получаю нормальное поведение мастера формы, например, self.get_cleaned_data_for_step(step)
возвращает None
, если step
не в self.storage
, и formset
правильно запускается при использовании step
после удаления step
от self.storage
.
Чтобы удалить step
из self.storage
, я использовал метод process_step
в formwizard
.
def process_step(self, form):
""" Process the form after step data is submitted and validated by jQuery. """
#--> Get form prefix
prefix = form.prefix
#--> Action per step
if prefix == 'e':
#--> Set previous experiment
try:
exp_save = self.get_cleaned_data_for_step('e')
if exp_save is None:
pass
else:
exp_save = exp_save['e_exp'].id
except KeyError:
exp_save = None
#--> Get selected experiment
exp_sel = form.cleaned_data['e_exp'].id
#--> Compare and delete steps if needed
if exp_save is None:
pass
else:
if exp_sel == exp_save:
pass
else:
for stepN in self.delStep[exp_sel]:
#--> self.delStep is a dict with the steps to be deleted for each exp_sel
if stepN in self.storage.data['step_data'].keys():
#--> Remove the key-value pair from data and files if there is already something to delete
del self.storage.data['step_data'][stepN]
del self.storage.data['step_files'][stepN]
else:
pass
else:
pass
#--> Return as implemented in the base class
return self.get_form_step_data(form)
#---
Это, как уже упоминалось dirkgroten, не удаляет оставшиеся файлы.