Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask 找不到应用程序。在视图函数内部工作或推送应用程序上下文。使用数据库中的数据创建下拉列表_Flask_Foreign Keys_Flask Sqlalchemy_Flask Wtforms - Fatal编程技术网

Flask 找不到应用程序。在视图函数内部工作或推送应用程序上下文。使用数据库中的数据创建下拉列表

Flask 找不到应用程序。在视图函数内部工作或推送应用程序上下文。使用数据库中的数据创建下拉列表,flask,foreign-keys,flask-sqlalchemy,flask-wtforms,Flask,Foreign Keys,Flask Sqlalchemy,Flask Wtforms,我花了好几个小时在互联网上寻找解决这个问题的方法 from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() 目前,我正试图建立一个网站来管理学生。我想用它来创建多个教室,学生将属于这些教室。因此,每个教室都会有一些学生 为此,我使用flask_sqlalchemy在一个文件中创建了一个DB,然后在另一个文件中创建了两个模块(学生和教室),如下所示 class StudentModel(db.Model): __tablenam

我花了好几个小时在互联网上寻找解决这个问题的方法

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
目前,我正试图建立一个网站来管理学生。我想用它来创建多个教室,学生将属于这些教室。因此,每个教室都会有一些学生

为此,我使用flask_sqlalchemy在一个文件中创建了一个DB,然后在另一个文件中创建了两个模块(学生和教室),如下所示

class StudentModel(db.Model):
    __tablename__ = "students"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    email = db.Column(db.String(80), nullable=False, unique=True)
    year = db.Column(db.String(20), nullable=False)
    school = db.Column(db.String(20), nullable=False)

    classroom_id = db.Column(db.Integer, db.ForeignKey("classrooms.id"))
    classroom = db.relationship("ClassroomModel")

class ClassroomModel(db.Model):
    __tablename__ = "classrooms"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    description = db.Column(db.String(100), nullable=False)

    students = db.relationship("StudentModel", lazy="dynamic")
然后,增加了一些教室进行测试,到目前为止效果良好

就在创建表单之后,这个问题才开始出现

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectField
from wtforms.validators import DataRequired, Email, Length, ValidationError

from models import ClassroomModel, StudentModel


YEAR_CHOICES = [("", '<<Choose Student Year>>'), ('Year 1', 'Year 1'), ('Year 2', 'Year 2'), ('Year 3', 'Year 3')]
SCHOOL_CHOICES = [("", '<<Choose Student School>>'), ('Yang-san', 'Yang-san Secondary School'),
                  ('Ji-san', 'Ji-san Secondary School'), ('Yong-doo', 'Yong-doo Secondary School'),
                  ('Korea', 'Korea Secondary School')]

CLASSROOM_CHOICES = [(classroom.id, classroom.name) for classroom in ClassroomModel.query.all()]

def validate_selection(form, field):
    if field.data == "":
        raise ValidationError("Make sure to choose an option")


class StudentForm(FlaskForm):
    name = StringField('Student Name',
                       validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Student Email',
                        validators=[DataRequired(), Email()])
    year = SelectField('Student Year',
                       choices=YEAR_CHOICES,
                       validators=[validate_selection]
                       )
    school = SelectField('Student School',
                         choices=SCHOOL_CHOICES,
                         validators=[validate_selection]
                         )
    classroom = SelectField('Student Classroom',
                            choices=ClassroomModel.get_all_classroom())
    submit = SubmitField('Add Student')
来自烧瓶\ wtf进口烧瓶表单
从wtforms导入StringField、SubmitField和SelectField
从wtforms.validators导入所需数据、电子邮件、长度、ValidationError
从模型导入ClassroomModel、StudentModel
年份选择=[(“”,“”),(“第一年”,“第一年”),(“第二年”,“第二年”),(“第三年”,“第三年”)]
学校选择=[(“”,“”),(“阳三”,“阳三中学”),
(‘吉三’、‘吉三中学’)、(‘勇斗’、‘勇斗中学’),
(“韩国”,“韩国中学”)]
ClassroomModel.query.all()中教室的教室_选项=[(教室id,教室名称)]
def验证_选择(表格、字段):
如果field.data==“”:
引发ValidationError(“确保选择一个选项”)
班级学生表格(烧瓶表格):
name=StringField('Student name',
验证器=[DataRequired(),长度(最小值=2,最大值=20)])
email=StringField(“学生电子邮件”,
验证器=[DataRequired(),Email()])
年份=选择字段('学生年份',
选项=年份选项,
验证程序=[验证所选内容]
)
学校=选择字段(“学生学校”,
选择=学校选择,
验证程序=[验证所选内容]
)
教室=选择字段(“学生教室”,
choices=ClassroomModel.get\u all\u教室()
submit=SubmitField('添加学生')
当我试着用上面的代码运行一个应用程序时,它给了我这个错误消息。

我从一些实验中得出的结论是这条线

**

教室_选项=[(教室id,教室名称)用于教室中的 ClassroomModel.query.all()]

**

这会导致这样的错误,因为删除的那一行不会再引起任何错误

我不知道我做错了什么,但我想做的只是给每个学生一个教室id作为外键,这样当我可以在创建单独的教室页面时使用它,它可以在该页面上显示属于教室的学生列表,以管理他们的出勤情况。请问,有谁能指导我克服这个头痛吗?任何帮助都将不胜感激


(顺便说一句,教室已经用自己的id存在数据库中,以防万一它可能会给您提供任何额外的线索)

在ClassroomModel.query.all()中,教室的行:
教室_选项=[(教室.id,教室.name)]
导致此错误,因为它不在应用程序上下文中,而应用程序上下文将是使用
app=Flask(\uuuu name\uuuu)作为装饰器(如路线)的代码的任何部分

要消除此错误,只需按如下方式修改行:

def get_classrooms():
    with app.app_context():
        db.create_all()
        return [(classroom.id, classroom.name) for classroom in ClassroomModel.query.all()]

CLASSROOM_CHOICES = get_classrooms()

另外,如果您已在单独的文件中启动了我们的应用程序和db,请确保已将它们导入此文件。

ClassroomModel.query.all()中教室的行:
教室\u选项=[(教室.id,教室.name)]
导致此错误,因为它不在应用程序上下文中,而应用程序上下文将是使用
app=Flask(\uuuu name\uuuu)作为装饰器(如路线)的代码的任何部分

要消除此错误,只需按如下方式修改行:

def get_classrooms():
    with app.app_context():
        db.create_all()
        return [(classroom.id, classroom.name) for classroom in ClassroomModel.query.all()]

CLASSROOM_CHOICES = get_classrooms()

另外,如果您在单独的文件中启动了我们的应用程序和数据库,请确保已将它们导入此文件。

我已经有一段时间无法进入堆栈,所以请检查此注释。我现在清楚地知道引起麻烦的原因是什么。我迟来的感激。非常感谢您的解释!我已经有一段时间不能进入堆栈了,所以我只是查看了这个评论。我现在清楚地知道引起麻烦的原因是什么。我迟来的感激。非常感谢您的解释!