заполнение данных объекта из flaskSQLAlchemy в поля wtfforms - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь заполнить данные из модели пользователя, такие как имя пользователя и адрес электронной почты, в форму, чтобы администратор мог обновить их, используя идентификатор_пользователя, переданный в маршруте, для запроса пользователя. Но я делаю пользовательскую проверку в форме, чтобы проверить, не изменилось ли поле, поэтому не возникнет ошибка, что имя пользователя занято.

В настоящее время я использую глобальную переменную g. Flask для сопоставления пользовательских данных 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)

Нечто я не могу использовать текущего пользователя, так как администратор вошел в систему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...