Flask-wtf can't set default value for DateTimeField

Viewed 691

I'm making a project on Flask and I need to set the default value for the wtforms.DateTimeField()

def new_edit_task(task):
    class EditTask(FlaskForm):
        new_name = StringField('Name of task', validators=[DataRequired()], default=task.name)
        new_description = TextAreaField('Description', validators=[DataRequired()], default=task.description)
        new_deadline = DateTimeField("Deadline", format='%Y-%m-%dT%H:%M',
                                     default=task.deadline)
        new_link = StringField('Email', validators=[DataRequired()], default=task.link)
        submit = SubmitField('Отправить')
    return EditTask()

task is an SQLAlchemy model and task.deadline is datetime.datetime object.

That's how I render new_deadline field in HTML:

{{ form.new_deadline(class="half-width", type='datetime-local') }}<br>
      {% for error in form.new_deadline.errors %}
      <p class="alert alert-danger" role="alert">
                {{ error }}
            </p>
        {% endfor %}

form is EditForm object here

But it doesn't work. There is "dd.mm.yyyy --:--" on the page.

Can you please explain to me what am I doing wrong?

2 Answers

Your task.deadline returns just value from database. I suppose in dd.mm.yyyy format. Please note that format='%Y-%m-%dT%H:%M' do nothing with default data. This pattern is for checking input data.

task.deadline value should be reformatted properly before using in form.

So, I've solved the problem.

Instead of using DateTimeField and rendering this field with type="datetime-local", I use DateTimeLocalField from wtforms.field.html5. And that's actually works!

Related