web-dev-qa-db-ja.com

flask wtform TypeError:__ init __()は1から2の位置引数を取りますが、3つが指定されました

フォームの検証に問題があります。国リストは正しく生成され、以前のフォームは正常に機能しました。 POSTリクエストに割り込んでいるだけです。

これが私のforms.pyです:

from wtforms import Form, BooleanField, SelectField, \
                    StringField, PasswordField, SubmitField, validators, \
                    RadioField
from ..models import User
from pycountry import countries
...
## Account settings
# We get all COUNTRIES
COUNTRIES = [(c.name, c.name) for c in countries]
# edit profile
class ProfileForm(Form):
    username = StringField('name',[validators.Length(min=1, max=120), validators.InputRequired])
    email = StringField('email', [validators.Length(min=6, max=120), validators.Email()])
    company = StringField('name',[validators.Length(min=1, max=120)])
    country = SelectField('country', choices=COUNTRIES)
    news = BooleanField('news')

そしてここにビューがあります:

@user.route('/profile/', methods=['GET', 'POST'])
@login_required
def profile():
    userid = current_user.get_id()
    user = User.query.filter_by(id=userid).first_or_404()
    print(user)
    form = ProfileForm(request.form)
    if request.method == 'POST' and form.validate():
        user.username = form.username.data
        ...
        return render_template('settings.html', form=form )
    else:
        form.username.data = user.username
        ...
        return render_template('settings.html', form=form )
7
jmrueda

これは、validators.InputRequiredではなくvalidators.InputRequired()である必要があります。ありがとう@jackevans

22
jmrueda