Мое лучшее предположение заключается в том, что вы JSONfify значения формы (json.dumps(form.cleaned_data, ...)
), но вы не де-JSONify его при перезагрузке из сеанса.
При чтении сеанса вам нужно сделать json.loads(...)
в какой-то момент:
saved_form = json.loads(request.session.get('save_form', ''))
Значение по умолчанию ''
может быть не лучшим, я не пробовал.Если это дает вам ошибку, вы можете попробовать заменить ее на {}
.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ:
Примечаниечто загрузка контента из сеанса, вероятно, должна выполняться в последней ветке else.Как правило, вы не хотите указывать начальное значение, когда пользователь отправляет данные, как в POST
запросе:
def someview(request):
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
clean_form = json.dumps(form.cleaned_data, default=str)
request.session['save_form'] = clean_form
else:
pass
else:
saved_form = json.loads(request.session.get('save_form', ''))
form = Form(initial=saved_form)
EDIT 2:
Как правило, то, что вы хотите сделать в представлении формы, часто очень похоже, и вы можете обнаружить, что повторяете тот же самый шаблон.К счастью, Django может помочь с этим, и он называется представлениями на основе классов, и я рекомендую ccbv.co.uk , если вы заинтересованы в этом, например, FormView .
Тем не менее, они могут быть немного запутанными, и вам трудно разобраться, когда вы только начинаете.Возможно, сейчас лучше придерживаться представлений на основе функций (как и вы), но я подумал, что связал эти 2 ресурса, которые мне хотелось бы иметь, когда я начал изучать представления на основе классов.