为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2022-08-25 15:16:36
在基本上具有两个具有基本关系的属性的烧瓶应用中,例如: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


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信