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}}"

но я не думаю, что это хорошо.

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