Django ModelForm DateField render value
models.py
class MyModel(models.Model):
date = models.DateField()
views.py
if request.method == 'GET':
instance = MyModel.objects.get(pk=pk)
form = MyModelForm(instance=instance)
return render(request, 'update.html', context={'form': form})
update.html
<input type="date" name="date" value="{{ form.date.value.isoformat }}" />
Работает нормально. Но в методе POST, если форма не валидна, я рендерю шаблон с ошибками, а я хочу рендерить значения, полученные из POST данных.
views.py
if request.method == 'POST':
instance = MyModel.objects.get(pk=pk)
form = MyModelForm(request.POST, instance=instance)
form.is_valid():
pass
return render(request, 'update.html', context={'form': form})
Но тогда form.date.value
уже находится в isoformat
(потому что он пришел из POST) и код шаблона перестает правильно отображать значение даты.
Как это исправить?
Решением, которое я нашел, является
value="{{form.start_date.value.isoformat|default:form.start_date.value}}"
но я не думаю, что это хорошо.