DateForm Python-Flask - [你不是一个有效的日期值']}

时间:2016-11-13 00:16:38

标签: python flask flask-wtforms

我正在开发一个WEB APP,在某些时候我想为我的Politic表创建一个新条目。我可以做到这一点,直到我不得不添加一些日期。由于日期格式错误,表单不接受输入。让我们看看它..

我有这样的表格:

class PoliticForm(FlaskForm):
  publicName = StringField('Public Name', validators=[DataRequired("Please enter politician public name.")])
  completeName = StringField('Complete Name', validators=[DataRequired("Please enter politician complete name.")])
  startDate = DateField('Start Date', format='%m-%d-%Y', validators=[DataRequired("Please enter the politician start Date.")])
  endDate = DateField('End Date', format='%m-%d-%Y', validators=(validators.Optional(),))
  submit = SubmitField('Add Politician', validators=(validators.Optional(),))

但不知何故,datefield不对,因为我的表单无法验证 startDate 字段,也无法验证 endDate 字段。 这是我的创建功能:

@app.route("/create_politician", methods=["GET", "POST"])
@login_required
def create_politician():
  form = PoliticForm()

  if request.method == "POST":
    print form.validate()
    flash(form.errors)
    if form.validate() == False:
      return render_template('createPolitician.html', form=form)
    else:
      print form.startDate.data
      newpolitician = Politic(form.publicName.data, form.completeName.data, form.startDate.data, form.endDate.data)
      print form.startDate.data
      db.session.add(newpolitician)
      db.session.commit()
      return redirect(url_for('home'))

  elif request.method == "GET":
    return render_template("createPolitician.html", form=form)

并在 flash(form.errors)上 我得到以下内容:

  

{'startDate':['请输入政治家的开始日期。'],'endDate':[你没有有效的日期值']}

models.py

class Politic(db.Model):
  __searchable__ = ['publicName', 'completeName']
  __tablename__ = 'politics'

  idPolitician = db.Column(db.Integer, primary_key=True)
  publicName = db.Column(db.String(150))
  completeName = db.Column(db.String(300))
  startDate = db.Column(db.Date)
  endDate = db.Column(db.Date)

  def __init__(self, publicName, completeName, startDate, endDate):
    self.publicName = publicName.title()
    self.completeName = completeName.title()

html的

<form method="POST" action="/create_politician">
        {{ form.hidden_tag() }}

        <div class="form-group">
          {{ form.publicName.label }}
          {{ form.publicName }}
        </div>

        <div class="form-group">
          {{ form.completeName.label }}
          {{ form.completeName }}
        </div>

        <div class="form-group">
          {{ form.startDate.label }}
          {{ form.startDate }}
        </div>

        <div class="form-group">
          {{ form.endDate.label }}
          {{ form.endDate }}
        </div>

        {{ form.submit(class="btn-primary") }}

      </form>

任何想法,有什么不对。有没有办法格式化日期输入,以匹配表格要求的内容?

谢谢

此致

1 个答案:

答案 0 :(得分:0)

实际上,表单将使用该格式%Y-%m-%d进行验证,并且在您的字段定义格式中=&#39;%m-%d-%Y&#39;因某些原因对我不起作用,所以试着:   - 删除格式=&#39;%m-%d-%Y&#39;在日期字段定义中,所以保持烧瓶默认格式   - 打印在视图上收到的日期格式,并将其格式化为%Y-%m-%d

希望这会有所帮助