Использование метода WTForms populate_obj () с микро-фреймворком Flask - PullRequest
7 голосов
/ 01 июня 2011

У меня есть шаблон, который позволяет пользователю редактировать информацию о себе.

<form method="post">
    <table>
        <tr>
            <td>Username:</td>
            <td>{{user['username']}}</td>
        </tr>
        <tr>
            <td>New Password:</td>
            <td> <input type="password" name="password"></td>
            <td>{% if form.password.errors %} {{form.password.errors}} {% endif %}<td>
        </tr>
        <tr>
            <td>Re-enter Password:</td>
            <td> <input type="password" name="confirm_password">
            </td>
        </tr>
        <input type='hidden' name='username' value="{{user['username']}}">
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
</form>

У меня также есть функция просмотра для обработки таких изменений пользователем. База данных, которую я сейчас использую: MongoDB с модулем MongoKit . До сих пор я мог делать это только в функции просмотра, но безуспешно.

def edit():
    username = request.args.get('user')
    user = User.find_one({'username':username}) # Is this a correct way of doing it?
    form = UserForm(**what should be placed here?**, obj=user)

    if request.method == 'POST' and form.validate():
        form.populate_obj(user)
        user.save()
        return 'updated'
    return render_template('edituser.html', form=form, user=user)

Я прошу populate_obj (obj) для этой цели. Я не мог найти большую помощь в этом вопросе. Что я должен сделать, чтобы заставить populate_obj() работать?

Ответы [ 3 ]

15 голосов
/ 02 июня 2011

UserForm должно быть передано request.form, чтобы заполнить его значениями, доступными в запросе POST (если есть).

form = UserForm(request.form, obj=user)
6 голосов
/ 01 июня 2011

Используете ли вы Flask-WTF ? Если это так, проверьте следующий пример кода:

https://github.com/sean-/flask-skeleton/blob/master/skeleton/modules/aaa/views.py#L13

В частности, вы бы:

def edit():
    form = UserForm()
    if form.validate_on_submit():
        # Commit your form data

Итог, если вы используете Flask-WTF, я не уверен, какой у вас вопрос. Если вы не используете Flask-WTF, используйте Flask-WTF.

2 голосов
/ 14 декабря 2016

В случае Flask-WTF вы можете написать как

form = UserForm(obj=user)

Thant будет работать!

...