我有一个WTFforms“用户添加”表单,该表单接受用户的常用属性并将其提交到数据库。在不需要页面加载时,会填充这些html表单字段的值。
我没有设置任何Jinja代码来设置字段,并且在此页面的路由中,我没有将用户传递给render_template调用。
用户表单和用户类别的字段与您期望的非常相似
用户对象
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(64), index=True, unique=False)
surname = db.Column(db.String(64), index=True, unique=False)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
num_records_added = db.Column(db.Integer, unique=False, default=0)
num_records_edited = db.Column(db.Integer, unique=False, default=0)
role = db.Column(db.String(20), index=False, unique=False, default='Editor')
用户表单
class AddUserForm(FlaskForm):
firstname = StringField('First name', validators=[DataRequired()])
surname = StringField('Surname', validators=[DataRequired()])
email = StringField('Email address', validators=[DataRequired(), Email()])
role = SelectField('Role', choices=[], validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired()])
num_records_added = IntegerField('Number of Records Added')
submit = SubmitField('Submit')
我的假设是通过flask_login登录的用户与表单之间存在交互,因为他们共享相似的属性/字段。
为了证明这一点,我修改了表单,以便每个字段的名称末尾都带有一个“ _”,并更新了路由/模板以使用这种新的命名方式,问题就消失了。
有人可以解释这里发生了什么,避免这种问题的正确方法是什么?
答案 0 :(得分:0)
我发现了问题,原来是导致问题的lastpass的自动填充行为。
它在字段中填写的信息与表单字段的ID /标签与其网站条目相匹配。
我认为浏览器的其他自动填充行为可能会发生这种情况。
在这种情况下,我必须接受我需要为与这些自动填充字段不匹配的表单字段使用id,否则将填充它们。