在基本上具有两个具有基本关系的属性的烧瓶应用中,例如:models.pyfrom . import dbclass ProjectModel(db.Model): __tablename__ = "projectmodels" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) projects = db.relationship("Project", backref="projectmodel", lazy="select")class Project(db.Model): __tablename__ = "projects" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) project_model_id = db.Column(db.Integer, db.ForeignKey("projectmodels.id"), nullable=False)创建对象时将有一个依赖数据库。ProjectwtformsSelectFieldprojectmodels我的解决方案是定义一个函数,返回一个 :listSelectField[choices]forms.pyfrom . import dbfrom wtforms import *def projectmodels(): models = ProjectModel.query.all() models_l = list() for model in models: models_l.append((str(model.id), model.name)) return models_lclass AddProjectForm(Form): name = StringField(label="Project Name") project_model = SelectField("Project Model", choices=projectmodels())在 Flask 应用运行时,在应用运行之前列出数据库中的所有对象。但在该会话期间,如果添加了任何其他项目模型,则在重新运行应用之前,它不会列出它们。SelectField让所有这些形式在 routes.py 和部分中工作可以解决这个问题,但我想这不是最好的解决方案。@app.route解决方案是什么?
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
def __init__(self, *args, **kwargs): super(AddProjectForm, self).__init__(*args, **kwargs) self.project_model.choices = [(a.id, a.name) for a in ProjectModel.query.order_by(ProjectModel.id)]
在类下初始化它为我解决了这个问题。AddProjectForm
添加回答
举报
0/150
提交
取消