Estoy teniendo problemas con wtforms selectfields cuando uso un POST con Flask

Soy bastante nuevo en wtforms y flask y estaba jugando con selectfields y obtuve un error. El formulario en sí funciona bien sin el campo de selección, pero con él recibo el siguiente error:

Error:

....fields.py", line 386, in pre_validate for v, _ in self.choices: TypeError: 'NoneType' object is not iterable 

Veo el campo de selección por lo que se está representando. Sospecho que de alguna manera la identificación no se está validando correctamente en POST y no está devolviendo ninguna. ¿O tiene algo que ver con la devolución de mi tupla de campo selecto? También el campo de ID que estoy usando se extrae de la clave automática ndb de GAE (). Id () que es bastante larga y desagradable. ¿Podría ser que la longitud de identificación utilizada para el campo de selección es demasiado larga?

Google no ha proporcionado mucho en términos del problema exacto, así que pensé que publicaría aquí. Código relevante a continuación. Si me falta algo por favor hágamelo saber

código de views.py:

     @app.route('/new/post', methods = ['GET', 'POST']) @login_required def new_post(): form = PostForm() if form.validate_on_submit(): post = Post(title = form.title.data, content = form.content.data, hometest = form.hometest.data, author = users.get_current_user()) post.put() flash('Post saved on database.') return redirect(url_for('list_posts')) form.hometest.choices = [ (h.key.id(),h.homename)for h in Home.query()] return render_template('new_post.html', form=form) 

    myforms.py :

     class PostForm(Form): title = wtf.TextField('Title', validators=[validators.Required()]) content = wtf.TextAreaField('Content', validators=[validators.Required()]) hometest = wtf.SelectField(u'Home Name List', coerce=int,validators=[validators.optional()]) 

    new_post.html:

     {% extends "base.html" %} {% block content %} 

    Write a post

    {{ form.csrf_token }}


    {{ form.title|safe }}
    {% if form.title.errors %}

      {% for error in form.title.errors %}
    • {{ error }}
    • {% endfor %}
    {% endif %}


    {{form.hometest}} {% if form.hometest.errors %}

      {% for error in form.hometest.errors %}
    • {{ error }}
    • {% endfor %}
    {% endif %}


    {{ form.content|safe }}
    {% if form.content.errors %}

      {% for error in form.content.errors %}
    • {{ error }}
    • {% endfor %}
    {% endif %}

    {% endblock %}

    form.validate configurar sus opciones antes de llamar a validate_on_submit as form.validate intentará validar el valor provisto (si existe) contra la lista de opciones (que es None antes de establecer choices ):

     form = PostForm() form.hometest.choices = [(h.key.id(), h.homename) for h in Home.query()] if form.validate_on_submit(): # form is valid, continue 

    Debes proporcionar choices=[...] argumento, como

     wtf.SelectField(u'Home Name List', choices=[(1, 'Label 1'), (2, 'Label 2')], coerce=int, validators=[validators.optional()])