如何使用wtforms SelectField,这取决于flask & flask-

在基本上具有两个具有基本关系的属性的烧瓶应用中,例如:


models.py


from . import db


class 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.py


from . import db

from 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_l


class AddProjectForm(Form):

    name = StringField(label="Project Name")

    project_model = SelectField("Project Model", 

                    choices=projectmodels())


在 Flask 应用运行时,在应用运行之前列出数据库中的所有对象。但在该会话期间,如果添加了任何其他项目模型,则在重新运行应用之前,它不会列出它们。SelectField


让所有这些形式在 routes.py 和部分中工作可以解决这个问题,但我想这不是最好的解决方案。@app.route


解决方案是什么?


白猪掌柜的
浏览 77回答 1
1回答

HUWWW

  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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python