Tôi khá mới với wtforms và bình và đã rối tung xung quanh với các vùng chọn và gặp lỗi. Các hình thức bản thân làm việc tốt mà không có sự selectfield nhưng với nó tôi nhận được lỗi sau:Tôi đang gặp vấn đề với wtforms selectfields khi tôi sử dụng POST với Flask
Lỗi:
....fields.py", line 386, in pre_validate
for v, _ in self.choices: TypeError: 'NoneType' object is not iterable
tôi thấy selectfield do vậy sẽ được trả lại. Tôi nghi ngờ bằng cách nào đó id không được xác nhận đúng trên POST và không trả lại. Hoặc nó có cái gì để làm với tuple selectfield của tôi được trả lại? Ngoài ra trường ID tôi đang sử dụng được lấy từ khóa tự động ndb của GAE(). Id() khá dài và đáng ghét. Có thể độ dài id đang được sử dụng cho vùng chọn quá dài?
Googling đã không cung cấp nhiều về vấn đề chính xác vì vậy tôi nghĩ rằng tôi sẽ đăng bài ở đây. Mã có liên quan bên dưới. Nếu tôi là thiếu một cái gì đó xin vui lòng cho tôi biết
đang 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 %}
<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 %}
Làm cách nào để bạn bỏ qua lĩnh vực cụ thể nếu bạn không muốn xác nhận trên nó? Tôi nhận được một lỗi cho trường ngày với validators = [validators.optional()] – moaglee
Giá trị yêu cầu một câu hỏi riêng biệt về điều đó với một ví dụ tối thiểu, tái sản xuất. Ai đó sẽ có thể giúp :-) –