(Django) Как сохранить значения ввода после отправки формы
Я имею следующий вид (усеченный):
def scheduler(
request,
year=None,
month=None,
event_id=None,
delete_id=None,
):
# Handle the event form
if request.POST:
event_form = EventForm(request.POST, instance=event)
if event_form.is_valid():
event = event_form.save()
dfkl_number = event_form.cleaned_data['dfkl_id']
Event.objects.filter(
id=event.id,
).update(dfkl_number=dfkl_number)
start_time = event_form.cleaned_data['start_time']
start_time = user_tz.localize(start_time.replace(tzinfo=None))
end_time = event_form.cleaned_data['end_time']
end_time = user_tz.localize(end_time.replace(tzinfo=None))
# if the end time is before the start time, try setting it to the same day
if end_time < start_time:
end_time = end_time.replace(
year=start_time.year,
month=start_time.month,
day=start_time.day)
# if the hour is also before, just use the start time
if end_time < start_time:
end_time = start_time
Event.objects.filter(
id=event.id,
).update(start_time=start_time)
Event.objects.filter(
id=event.id,
).update(end_time=end_time)
return HttpResponseRedirect('/events')
Я хочу, чтобы при отправке формы (if request.POST
), независимо от того, действительна форма или нет, значения входов не исчезали.
scheduler.html
:
Входы event_form.description, event_form.event_type, event_form.dfkl_id
сохраняют свои значения после нажатия кнопки submit, но по какой-то причине значение datetimepickers исчезает.
Как сделать так, чтобы значение ввода в datetimepickers не исчезало при отправке формы?
Вам нужно вернуть ту же форму, которая была проверена, чтобы вернуть то же содержимое ввода и ошибки формы. Также переместите ваш запрос POST
после определения контекстных данных (После data
) Например, так:
if request.POST:
event_form = EventForm(request.POST, instance=event)
if event_form.is_valid():
[... validate logic ...]
return HttpResponseRedirect('/events')
data.update({'event_form':event_form})
return render(request, template_name, data)
Теперь, если event_form
не подтверждается, то у него есть маршрут для возврата.