title: Can not get data back from WTForms FormField on validate_on_submit
body: <p><strong>user_edit_profile.html:</strong></p>
  
  <pre><code>{% extends "base.html" %}
  {% import "bootstrap/wtf.html" as wtf %}
  {% block mainbody %}
      &lt;div class="container"&gt;
          &lt;div class="col-md-8 col-md-offset-2"&gt;
              &lt;div class="page-header"&gt;
                  &lt;h3&gt;{{ _('User Edit Profile') }}&lt;/h3&gt;
              &lt;/div&gt;
              &lt;div&gt;
                  {{ wtf.quick_form(form, form_type="horizontal", horizontal_columns=('md', 3, 9)) }}
              &lt;/div&gt;
          &lt;/div&gt;
      &lt;/div&gt;
  {% endblock %}
  </code></pre>
  
  <p><strong>forms.py</strong></p>
  
  <pre><code>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")
  </code></pre>
  
  <p><strong>user.py</strong></p>
  
  <pre><code>@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)
  </code></pre>
  
  <p>I didn't paste the <code>models.py</code> since it works well, I think there is no problem.</p>
  
  <p>Now, <code>print(form.basic_information.surname.data)</code> feedbacks <code>None</code>, which means I cannot get anything from the input in the <code>surname</code> field in the wtf form. </p>
  
  <p>When I use Charles to capture the packet, I found the client really had sent the input thing, such as "Smith" to the server. But obviously the server lost it. </p>
  
  <p>I also tried to use <code>FlaskForm</code> instead of <code>Form</code> in the subform at the same time I override the <code>csrf_enabled</code> args to <code>False</code> by using:</p>
  
  <pre><code>def __init__(self, *args, **kwargs):
      kwargs['csrf_enabled'] = False
      FlaskForm.__init__(self, *args, **kwargs)
  </code></pre>
  
  <p>But this didn't help.</p>
  
  <p>I don't know where is the problem, thanks for your help!</p>