Python 将flaskSQLAlchemy中的对象数据填充到wtfforms字段

Python 将flaskSQLAlchemy中的对象数据填充到wtfforms字段,python,python-3.x,flask,flask-sqlalchemy,flask-wtforms,Python,Python 3.x,Flask,Flask Sqlalchemy,Flask Wtforms,我正在尝试将用户名和电子邮件等用户模型中的数据填充到表单中,以便管理员可以使用在查询用户的路由中传递的用户id更新这些数据。但我正在表单中进行自定义验证,以检查字段是否没有更改,这样就不会在使用用户名时引发错误 目前,我正在使用Flask提供的g全局变量来匹配表单验证函数中要传递的路由中查询的用户obj数据。我有没有办法做得更好 以下是表格的代码: class UpdateUserForm(FlaskForm): username = StringField("Username", va

我正在尝试将用户名和电子邮件等用户模型中的数据填充到表单中,以便管理员可以使用在查询用户的路由中传递的用户id更新这些数据。但我正在表单中进行自定义验证,以检查字段是否没有更改,这样就不会在使用用户名时引发错误

目前,我正在使用Flask提供的
g
全局变量来匹配表单验证函数中要传递的路由中查询的用户obj数据。我有没有办法做得更好

以下是表格的代码:

class UpdateUserForm(FlaskForm):
    username = StringField("Username", validators=[DataRequired()])
    email = StringField("Email", validators=[DataRequired(), Email()])
    status = SelectField("Account Status", choices=[(True, "Verified"), (False, "Not Verified")], coerce=bool, validators=[InputRequired()])
    submit = SubmitField("Update")

def validate_username(self, username):
    if username.data != g.username:
        user = User.query.filter_by(username=username.data).first()
        if user:
            raise ValidationError("That username is taken, please choose a different one.")

def validate_email(self, email):
    if email.data != g.email:
        user = User.query.filter_by(email=email.data).first()
        if user:
            raise ValidationError("That email is taken, please choose a different one.")
这是路线的代码:

admin.route("/admin_panel/update_user/<int:user_id>", methods=['GET', 'POST'])
@admin_login_required
def update_user(user_id):

    user = User.query.filter_by(id=user_id).first()

    g.username = user.username
    g.email = user.email

    updateUserForm = UpdateUserForm()
    updateUserForm.username.data = user.username
    updateUserForm.email.data = user.email
    print("this is first one" + str(updateUserForm.status.data))

    if updateUserForm.validate_on_submit():
        user.username = updateUserForm.username.data
        user.email = updateUserForm.email.data
        user.verified = updateUserForm.status.data
        print("this is second one" + str(updateUserForm.status.data))
        db.session.commit()
        flash("Account updated!", 'success')
        return redirect(url_for('admin.admin_panel'))

    return render_template("admin/update_user.html", title="Update User", updateUserForm=updateUserForm)
admin.route(“/admin\u panel/update\u user/”,方法=['GET','POST'])
@需要管理员登录
def更新用户(用户id):
user=user.query.filter\u by(id=user\u id).first()
g、 username=user.username
g、 email=user.email
updateUserForm=updateUserForm()
updateUserForm.username.data=user.username
updateUserForm.email.data=user.email
打印(“这是第一个”+str(updateUserForm.status.data))
如果updateUserForm.validate_on_submit():
user.username=updateUserForm.username.data
user.email=updateUserForm.email.data
user.verified=updateUserForm.status.data
打印(“这是第二个”+str(updateUserForm.status.data))
db.session.commit()
flash(“帐户已更新!”,“成功”)
返回重定向(url\u用于('admin.admin\u面板'))
返回呈现模板(“admin/update\u user.html”,title=“update user”,updateUserForm=updateUserForm)

并不是说我不能使用当前用户,因为管理员登录了

您可以显示您当前使用的代码,以便更容易理解您想要做什么,从而为您提供所需的帮助哦,很抱歉。有些事情我无法理解。谁在数据库中记录用户?是管理员还是用户本人?。如果用户自己做,管理员应该做什么?另一件事是你的文本很难理解。请,您能花几分钟时间,通过提供尽可能多的关于您想要做什么的详细信息来正确地重新表述它吗?例如,您可以显示代码执行过程中涉及的后续步骤。因此,用户可以登录/注册/编辑配置文件;。虽然管理员也可以在用户配置文件上进行编辑,这正是我试图实现的,但在这里,我尝试进行验证,检查管理员是否更改了用户的用户名,它会说是否已更改,如果未更改,则不会说已更改,只要是同一用户,管理员正在编辑。谢谢你的支持