WTForms - данные DateTimeLocalField отсутствуют после отправки - PullRequest
0 голосов
/ 16 октября 2018

После отправки формы с запросом POST все данные Field имеют свое значение, кроме DateTimeLocalField.Доступ к значению данных DateTimeLocalField имеет тип None.

Форма

class ArticleForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    category = SelectField(u'Category', choices=categories.choices)
    town = StringField('Town', validators=[DataRequired()])
    minimal_price = IntegerField('Minimal price')
    article_image = FileField('Article_image', validators=[FileRequired()])
    time_left = DateTimeLocalField('Time to end', validators=[InputRequired()],
                              format='%Y-%m-%d %H:%M:%S')
    description = TextAreaField('Description', validators=[DataRequired()])

Проверка (проверено с помощью is_submitted, все работы, кромеarticle_form.time_left.data, которая отсутствует)

if article_form.validate_on_submit():

    new_article = Article(name=article_form.name.data,
                          category=article_form.category.data,
                          town=article_form.town.data,
                          minimal_price=article_form.minimal_price.data,
                          article_image=name,
                          time_left=article_form.time_left.data, # <-- None
                          description=article_form.description.data,
                          user_id=current_user.id)

Любая помощь для получения данных из DateTimeLocalField?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

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

<input id="time_left" name="time_left" required type="datetime-local" value="2018-11-15T04:44">

Вы в основном ищете метку времени из тега, возвращенногоtag

date = re.search('(\d{4})[/.-](\d{2})[/.-](\d{2})[T](\d{2})[:](\d{2})',
          str(form.time_left)).group())

Дайте мне знать, сработало ли решение для вас или нашли лучшее решение проблемы.

0 голосов
/ 16 марта 2019

Используйте wtforms.fields.html5.DateTimeLocalField вместо wtforms.DateTimeLocalField.Установите формат с датой и временем, разделенными «Т».Если вы хотите использовать текущее время в качестве значения по умолчанию, установите параметр по умолчанию.

from wtforms.fields.html5 import DateTimeLocalField

class InterviewForm(Form):
    posted = DateTimeLocalField('Posted:', default=datetime.today, format='%Y-%m-%dT%H:%M')
0 голосов
/ 16 октября 2018

Попробуйте изменить формат DateTimeLocalField с

format='%Y-%m-%d %H:%M:%S' 

на:

format='%Y-%m-%dT%H:%M'

Совет: вы можете напечатать фактическое содержимое поля ввода допроверка правильности форматирования поля DateTimeLocalField.

...