TypeError: 'str' is not callable (Flask form validation)

TypeError: 'str' is not callable (Flask form validation)

我在 SO 上发现了很多与此相关的主题,但是其中 none 有助于解决我面临的问题。我知道在我的代码中某处是预期的函数,但它得到的是字符串。

相关代码:

class UserRegistrationForm(Form):
    photo = FileField('', validators=[DataRequired()])
    country = SelectField('','Select Country', choices=countries)
    first_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    middle_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    last_name = StringField('',[validators.Length(min=1,max=20), DataRequired()])
    dob = DateField('',format='YYYY-MM-DD', validators=[DataRequired()])
    address = TextAreaField('', validators=[DataRequired()])
    email = EmailField('', validators=[DataRequired(), Email()])
    mobile_number = StringField('', validators=[DataRequired()])
    password = PasswordField('', validators=[DataRequired()])

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    form = UserRegistrationForm(request.form)
    if request.method == 'POST' and form.validate():  # here's where the error is coming from

    file_name = request.files.getlist('photo')
    if file_name[-4:] not in ALLOWED_EXTENSIONS:
        flash('Invalid Image Type.')

    else:
        file_name = file_name.filename
        destination = '/'.join([TARGET, file_name])
        file_name.save(destination)

        country = form.country.data
        first_name = form.first_name.data
        middle_name = form.middle_name.data
        last_name = form.last_name.data
        dob = form.dob.data
        address = form.address.data
        email = form.email.data
        mobile_number = form.mobile_number.data
        password = sha256_crypt.encrypt(str(form.password.data))  # according to tutorial the string conversion here is correct.

关于我为什么会收到此错误的任何想法?已经坚持了几个小时。

    country = SelectField('','Select Country', choices=countries)

应该是

    country = SelectField('Select Country', choices=countries)

标签应该是第一个参数,第二个参数是验证器。您的代码将 'Select Country' 作为验证器传递,这显然会失败。