2017-05-30 35 views
0

私はスタッフが自分の名前を選択するための選択フィールドを作成しました。 ユーザーが自分の名前を選択せず​​、代わりにドロップダウンボックスを "---"にしたときの目標です。このシナリオでは、ValidationErrorでメッセージを出力します。現時点で私はこれをテストすると何も印刷されません。ここでWTFormsはSelectFieldボックスを検証できないようです。

は私forms.pyファイルです:

from flask_wtf import Form 
from wtforms import StringField, BooleanField, SelectField 
from wtforms.validators import DataRequired, Required, ValidationError 

class StaffNames(Form): 
     staff = SelectField(
     'staff', 
     choices=[("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')], 
     ) 
     def validate_staff(form, field): 
       if field.data is "---": 
         raise ValidationError("Sorry, you havn't chosen a staff name") 

ここに私のview.pyファイルされる:

from flask import render_template, flash, redirect 
from app import app 
from .forms import StaffNames 

@app.route('/') 
@app.route('/index', methods=['GET', 'POST']) 
def index(): 
    form = StaffNames() 
    if form.validate_on_submit(): 
     return redirect('/results') 
    return render_template('index.html', 
          title='RA Index Search', 
          form=form) 

ここでは、このフォームに関連する私のindex.htmlです:

<!-- extend base layout --> 
{% extends "base.html" %} 

{% block content %} 
<center> 
    <h1>Search</h1> 
    <form action="" method="post" name="login"> 

     <p>{{ form.staff }} Select your name</p> 
     <p><input type="submit" value="Search"></p> 
    </form> 

{% endblock %} 

誰かが私が間違っていることを見ることができますか、私の脳を溶かすことのない代替方法を提案することができます!笑 おかげ

答えて

0

は、私の知る限り見るようにあなたのコード内の2個のエラーがあります

  1. あなたはcsrc_token in your template formそうでない場合は、あなたのform.validate_on_submit()メソッドは常にFalseを返します含める必要があります。また、app.config['SECRET_KEY']をある値に設定してください。

  2. あなたの検証方法では、SelectBoxのデータプロパティが「---」であることを確認します。 dataは、choicesのリストで渡すタプルの最初の値を参照するため、これは起こりません。

あなた validate_staff方法は、以下の方法を変更

、あなたは問題ないはずです。

def validate_staff(form, field): 
    if field.data == "": 
     raise ValidationError("Sorry, you havn't chosen a staff name") 

class StaffNames(Form): 

    staff = SelectField(
     'staff', 
     choices=[ 
      ("", "---"), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('3', 'Lyn Fox')], 
     validators=[validate_staff], 
    ) 

注:StaffNamesフォームのバリデータリストへvalidate_staff機能を渡す必要がありそう検証は決してトリガーされる。私はそれに応じて上記のコードを変更しました。

関連する問題