Почему я пытаюсь отправить мою форму, возвращающую "Недопустимое значение даты и времени" - PullRequest
1 голос
/ 30 апреля 2019

Я создал форму, которая позволяла пользователю выбрать желаемую дату и время, но когда форма отправлена, я получил это сообщение об ошибке

Not a valid datetime value

Я попытался включить нужный формат или стандартный формат даты и времени, но получил тот же результат

#Form.py
class AddPostForm(FlaskForm):
    post_title = StringField('Share Title', validators=[DataRequired()])
    description = StringField('Description', validators=[DataRequired()])
    share_date = DateTimeField('Share Date', validators=[DataRequired()])


#views.py

@posts_blueprint.route('/add', methods=['GET', 'POST'])
@login_required
def add_post():
    form = AddPostForm()
    if request.method == 'POST':
        if form.validate_on_submit():
            new_post = Post(form.post_title.data, form.description.data, 
                            current_user.id, form.share_date)


            db.session.add(new_post)
            db.session.commit()
            flash('New shared Item, {}added!'.format(new_post.post_title), 
                  'success')
            return redirect(url_for('posts.user_posts'))
       else:
           flash_errors(form)
           flash('ERROR! Recipe was not added.', 'error')

   return render_template('add_post.html', title='Add Item', form=form)


#add_post.html
{% from "_form_macros.html" import render_errors %}
{% import "bootstrap/utils.html" as utils %}
{% import "bootstrap/wtf.html" as wtf %}
{% extends "layout.html" %}
{% block body %}

<div class="content-section">
  <div class="page-header">
    <h2>Add a New Post</h2>
</div>

<div class="container">
  <form action="{{ url_for('posts.add_post') }}" method="post" 
                  enctype="multipart/form-data">
      {{ form.csrf_token }}
<div class="form-group row">
  <legend for="post_title" class="col-form-legend col-sm-3">Title</legend>
  <div class="col-sm-6">
    <input type="text" class="form-control" id="post_title" 
    name="post_title" placeholder="Enter Post title...">
    {{ render_errors(form.post_title) }}
  </div>
</div>

<div class="form-group row">
  <legend for="description" class="col-form-legend col-sm- 
  3">Description</legend>
  <div class="col-sm-6">
    <input type="text" class="form-control" id="description" 
    name="description" placeholder="Enter post description...">
    {{ render_errors(form.description) }}
  </div>
</div>

<div class="form-group row">
<legend for="share_date" class="col-form-legend col-sm-3">Sharing 
Date</legend>
<div class="col-sm-6">
  <input type="datetime-local" class="form-control" id="share_date" 
  name="share_date" placeholder="Sharing Date...">
  {{ render_errors(form.share_date) }}
 </div>
 </div>

<div class="center">
  <div class="offset-sm-2 col-sm-10">
    <button type="submit" class="btn btn-success">Add post</button>
  </div>
</div>
</form>
</div>
</div>
{% endblock %}

Пользователь должен иметь возможность ввести желаемую дату и время и успешно отправить форму

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Кажется, что существует конфликт между тем, что ожидает ваша база данных, и тем, что отправляет ваша форма.Попробуйте посмотреть, какой формат даты вы используете в своей модели, а также попробуйте распечатать данные формы на консоли, чтобы увидеть, что она вам дает.Также попробуйте просмотреть документацию для wtforms, чтобы увидеть, какой тип даты он использует, и сопоставить его с полем даты в модели базы данных.

1 голос
/ 30 апреля 2019

Вам может потребоваться проверить, совпадает ли формат введенной даты с ожидаемым DateTimeField.

См .: DateTimeField Docs

Где формат по умолчанию: '%Y-%m-%d %H:%M:%S'

Если вам известен формат, который вы отправляете, вы можете указать его при создании объекта поля:

    share_date = DateTimeField('Share Date', format='your-format', validators=[DataRequired()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...