user_edit_profile.html:Невозможно получить данные от WTForms на validate_on_submit поле формы
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block mainbody %}
<div class="container">
<div class="col-md-8 col-md-offset-2">
<div class="page-header">
<h3>{{ _('User Edit Profile') }}</h3>
</div>
<div>
{{ wtf.quick_form(form, form_type="horizontal", horizontal_columns=('md', 3, 9)) }}
</div>
</div>
</div>
{% endblock %}
forms.py
from flask_wtf import FlaskForm
from wtforms import Form
class UserBasicInfoForm(Form):
surname = StringField(lazy_gettext("Surname"), validators=[Length(0, 64)])
class UserEditProfileForm(FlaskForm):
basic_information = FormField(UserBasicInfoForm)
submit = SubmitField(lazy_gettext("Submit"), id="user_edit_profile_submit")
user.py
@user.route("/edit-profile", methods=["GET", "POST"])
@login_required
def edit_profile():
form = UserEditProfileForm()
form.basic_information.surname.data = current_user.surname
if form.validate_on_submit():
current_user.surname = form.basic_information.surname.data
print(form.basic_information.surname.data)
current_user.save()
return redirect(url_for("frontend.index"))
return render_template("user_edit_profile.html", form=form)
Я не вставлял models.py
, так как он хорошо работает, я думаю, что проблем нет.
print(form.basic_information.surname.data)
обратная связь None
, что означает, что я ничего не могу получить от ввода в поле surname
в форме wtf.
Когда я использую Чарльза для захвата пакета, я обнаружил, что клиент действительно отправил на сервер входную информацию, такую как «Смит». Но, очевидно, сервер потерял его.
Я также попытался использовать FlaskForm
вместо Form
в подчиненном в то же время я отменяю csrf_enabled
арг к False
с помощью:
def __init__(self, *args, **kwargs):
kwargs['csrf_enabled'] = False
FlaskForm.__init__(self, *args, **kwargs)
Но это не помогло.
Я не знаю, где проблема, спасибо за помощь!
Это действительно решить мою проблему. Мое предыдущее понимание 'validate_on_submit' неверно. Благодаря! – urbainy