Разбор дат с использованием WTForms Flask - Python - PullRequest
0 голосов
/ 06 октября 2018

Привет. Итак, я уже давно успешно использую WTForms.

Проблема в том, как разбирать даты.

Я всегда использовал для присвоения переменныхв соответствии с данными формы следующим образом

firstname = form.firstname.data

Это сохранит введенные пользователем данные из данных формы в мою переменную с именем "firstname", которая прекрасно работает, моя проблема в том, что касается дат.

У меня есть следующий код

Класс WTForms

class BookingForm(Form):
start_date = DateField('Start Date', format='%m/%d/%Y')
end_date = DateField('End Date', format='%m/%d/%Y')

Маршрут бронирования

@app.route('/book/', methods=['GET','POST'])
@login_required
def book():
try:
    form = BookingForm(request.form)

    if request.method == "POST" and form.validate():
        start_date = form.start_date.data
        end_date = form.end_date.data
        # I Have also tried form.start_date.data.strftime('%m-%d-%Y') with no luck
 ...

Шаблон HTML {jinja}

<div class="col-md-4">
     {{ render_date_field(form.start_date) }}
</div>
<div class="col-md-4">
     {{ render_date_field(form.end_date) }}
</div>

Я также использую datetime в python

from datetime import datetime

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

Спасибо

1 Ответ

0 голосов
/ 07 октября 2018

form.date_created.data возвращает объект datetime.date.

Атрибуты month, day и year хранят эти значения как целые числа.Для решения этой проблемы нет необходимости импортировать datetime.

Вы можете использовать date.strftime('%m-%d-%y'), чтобы получить строковое представление, например "10-22-18".

form = BookingForm(request.form)  
if request.method == "POST" and form.validate():
    start_date = form.start_date.data
    end_date = form.end_date.data

    # print(type(start_date))   -> <class 'datetime.date'>

    start_month = start_date.month
    start_day = start_date.day
    start_year = start_date.year

    start_date_str = start_date.strftime('%m-%d-%y')
    # and so on...

Посмотритев Документация WTForms для DateField.

class wtforms.fields.DateField(default field arguments, format='%Y-%m-%d')
        Same as DateTimeField, except stores a datetime.date.

Подробнее об объекте date можно узнать в документах Документах Python

Совет : если бы вы попытались print(type(start_date)) посмотреть, что он печатает, вы, вероятно, выяснили бы это самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...