【问题标题】:Trouble with QuerySelectField in Flask-WTFFlask-WTF 中 QuerySelectField 的问题
【发布时间】:2015-08-14 08:50:26
【问题描述】:

我正在尝试在烧瓶表单中填充 sqlalchemy 请求的结果的选择字段,但我不断收到“TypeError: 'NoneType' object is not iterable

我看过这个答案 (how to use QuerySelectField in flask?) ,但它并没有帮助我解决为什么我的查询(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

我的表单.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 %}

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    显而易见的闪光:

    我的辅助函数没有产生返回.....

    def select_group():
            return Course.query.all()
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多