[英]Trouble with QuerySelectField in Flask-WTF
我正在嘗試將一個選擇字段填充為燒瓶形式的sqlalchemy請求的結果,但是我不斷收到“ TypeError:'NoneType'對象是不可迭代的
我已經看過這個答案( 如何在燒瓶中使用QuerySelectField? ),但這並不能幫助我解決為什么我的查詢(choices = Course.query.all())什么都沒回來的問題-我認為這是問題。
我的models.py:
class Course(db.Model):
__tablename__ = 'courses'
id = db.Column(db.Integer, primary_key=True)
course_name = db.Column(db.String, nullable=False)
course_description = db.Column(db.String, nullable=True)
course_location = db.Column(db.String, nullable=True)
start_date = db.Column(db.DateTime, nullable=True)
end_date = db.Column(db.DateTime, nullable=True)
start_time = db.Column(db.Time, nullable=True)
end_time = db.Column(db.Time, nullable=True)
max_number_students = db.Column(db.Integer, default=8)
spaces_left = db.Column(db.Integer, default=5)
is_active = db.Column(db.Boolean, default=True)
price = db.Column(db.Float, nullable=True)
def __init__(self, course_name=None, course_description=None, course_location=None,start_date=None,end_date=None,
start_time=None,end_time=None,max_number_students=None,spaces_left=None,is_active=None, price=None):
self.course_name = course_name
self.course_description=course_description
self.course_location = course_location
self.start_date = start_date
self.end_date = end_date
self.start_time = start_time
self.end_time = end_time
self.max_number_students = max_number_students
self.spaces_left = spaces_left
self.is_active = is_active
self.price = price
def __repr__(self):
return "<course name {}>".format(self.course_name)
class Purchase(db.Model):
__tablename__ = 'purchases'
uuid = db.Column(db.String, primary_key=True)
email = db.Column(db.String)
product_id = db.Column(db.Integer, db.ForeignKey('courses.id'))
payment_method = db.Column(db.String, nullable=True, default="Credit Card")
notes = db.Column(db.String, nullable=True)
date_purchased = db.Column(db.DateTime, nullable=False, default=func.now())
product = db.relationship(Course)
def __init__(self, uuid,email=None, product_id=None, product=None,payment_method=None, notes=None, date_purchased=None):
self.uuid=uuid
self.email=email
self.product_id=product_id
self.product = product
self.payment_method=payment_method
self.notes=notes
self.date_purchased=date_purchased
我的forms.py
from flask_wtf import Form
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms import StringField,
from wtforms.validators import DataRequired, Length, Email,
from project.models import Course
def select_group():
choices = Course.query.all()
form = EnrollmentForm(obj=choices)
form.product.choices = [(c.id, c.course_name) for c in choices]
class EnrollmentForm(Form):
email = StringField(
"email",
validators=[DataRequired(), Email(message = None),Length(min=3, max=40)]
)
product= QuerySelectField(query_factory=select_group)
payment_method = StringField('Payment', validators=[DataRequired()])
notes = StringField('Notes', validators=[DataRequired()])
和html形式:
{% block content %}
<h1>register</h1>
<br>
<form class="form-signin" action = "" method = "post">
{{ form.csrf_token }}
<div>{{ form.email.label }}: {{ form.email() }}</div>
<div>{{ form.product.label }}: {{ form.product() }}</div>
<div>{{ form.payment_method.label }}: {{ form.payment_method() }}</div>
<div>{{ form.notes.label }}: {{ form.notes() }}</div>
<button class="btn btn-sm btn-success" type="submit">Sign in</button>
</form>
{% endblock %}
明顯的致盲閃光:
我的輔助函數沒有產生回報.....
def select_group():
return Course.query.all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.