Python flask wtforms datetime проверяет другой

Можно ли выполнить проверку поля datetime в WTForms, сравнив его с другим datetime?

У меня есть форма

class EventEdit(FlaskForm):
timeIn = DateTimeField('Time In', validators=[DataRequired()])
timeOut = DateTimeField('Time Out', validators=[DataRequired()])
reason = RadioField('Reason', choices=[
    ('Incident','Incident'),
    ('Gym','Gym'),
    ('Meeting','Meeting'),
    ('Other','Other')])
comment = StringField('Additional Comments')
submit = SubmitField('Save Changes')

Мне нужно убедиться, что при вводе timeOut оно больше timeIn.

Кроме того, мне еще не удалось сделать поле timeOut необязательным.

Заранее спасибо.

1
0
627
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно перезаписать функцию validate в вашем классе. Но не забудьте сначала вызвать Form.validate(self), потому что он все еще необходим для проверки отдельных полей.

class EventEdit(FlaskForm):
    timeIn = DateTimeField('Time In', validators=[DataRequired()])
    timeOut = DateTimeField('Time Out', validators=[DataRequired()])
    reason = RadioField('Reason', choices=[
        ('Incident','Incident'),
        ('Gym','Gym'),
        ('Meeting','Meeting'),
        ('Other','Other')])
    comment = StringField('Additional Comments')
    submit = SubmitField('Save Changes')
    def validate(self):
        if not Form.validate(self):
            return False
        if self.timeIn.data < self.timeOut.data:
            return False
        else:
            return True

В итоге я сделал это, чтобы проверить несколько полей

def validate_timeOut(self, timeOut):
    if self.timeIn.data > self.timeOut.data:
        self.timeOut.errors.append('Time must be after Time In')
        return False
    else:
        return True

def validate_comment(self, comment):
    if len(self.comment.data) > 120:
        self.comment.errors.append('Comment is too long!')
        return False
    else:
        return True

Другие вопросы по теме