benutze Ich bin ziemlich neu zu wtforms und Kolben und war mit Selectfields herumspielen und bekam einen Fehler. Die Form selbst funktioniert gut ohne SELECT aber mit ihm bekomme ich folgende Fehlermeldung:Ich habe Probleme mit wtforms selectfields, wenn ich einen POST mit Flask
Fehler:
....fields.py", line 386, in pre_validate
for v, _ in self.choices: TypeError: 'NoneType' object is not iterable
ich die SELECT sehen, so dass es gemacht hat wird. Ich vermute, dass die ID auf POST nicht korrekt überprüft wird und keine zurückgibt. Oder hat es etwas damit zu tun, dass mein Selectfield-Tupel zurückgegeben wird? Auch das ID-Feld, das ich benutze, wird von GAEs automatischem ndb-Schlüssel(). Id() gezogen, der ziemlich lang und anstößig ist. Es könnte sein, dass die ID-Länge, die für das Auswahlfeld verwendet wird, zu lang ist.
Googling hat nicht viel in Bezug auf das genaue Problem zur Verfügung gestellt, so dachte, ich würde hier posten. Relevanter Code unten. Wenn ich etwas fehlt bin lass es mich wissen
views.py Code:
@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 %}
<h1 id="">Write a post</h1>
<form action="{{ url_for('new_post') }}" method="post" accept-charset="utf-8">
{{ form.csrf_token }}
<p>
<label for="title">{{ form.title.label }}</label><br />
{{ form.title|safe }}<br />
{% if form.title.errors %}
<ul class="errors">
{% for error in form.title.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<p>
<label for="title">{{form.hometest.label}}</label><br/>
{{form.hometest}}
{% if form.hometest.errors %}
<ul class="errors">
{% for error in form.hometest.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<p>
<label for="title">{{ form.content.label }}</label><br />
{{ form.content|safe }}<br />
{% if form.content.errors %}
<ul class="errors">
{% for error in form.content.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<p><input type="submit" value="Save post"/></p>
</form>
{% endblock %}
Wie können Sie es überspringen lassen spezifisches Feld, wenn Sie keine Validierung wünschen? Ich erhalte einen Fehler für das Datumsfeld mit validators = [validators.optional()] – moaglee
Es lohnt sich, eine separate Frage dazu mit einem minimalen, reproduzierbaren Beispiel zu stellen. Jemand sollte helfen können :-) –