使用sqlAlchemy查询动态填充WTForm SelectField

2024-05-03 13:03:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用postgreSQL数据库中某列的数据动态填充下拉列表中的选项。当我试图加载我的表单时,我得到:TypeError:'NoneType'对象不可读取。任何帮助将不胜感激。在

  File "/usr/lib/python2.7/site-packages/wtforms/widgets/core.py", line 323, in __call__
    for val, label, selected in field.iter_choices():
  File "/usr/lib/python2.7/site-packages/wtforms/fields/core.py", line 454, in iter_choices
    for value, label in self.choices:
TypeError: 'NoneType' object is not iterable

在模型.py在

^{pr2}$

在表单.py在

class NewProjForm(Form):
    pj_name = StringField('Project Name', validators=[InputRequired(), Length(min=1, max=1000)])
    pj_desc = TextAreaField('Project Description', validators=[InputRequired(), Length(min=1, max=3000)])
    coi_name = SelectField('COI:', validators=[InputRequired()])
    pj_poc_first = StringField('POC First Name', validators=[InputRequired(), Length(min=1, max=500)])
    pj_poc_last = StringField('POC Last Name', validators=[InputRequired(), Length(min=1, max=500)])

在应用程序副本在

@app.route('/addProjForm', methods=['GET','POST'])
def addProjForm():
        newProj = NewProjForm(request.form)
        newProj.coi_name.choices = db.session.query(ReqCriterion).filter(coi_name)
        if request.method == 'POST' and newProj.validate():
            addProj = Project(request.form['pj_name'], request.form['pj_desc'], request.form['coi_name'], request.form['pj_poc_first'], request.form['pj_poc_last'])
            db.session.add(addProj)
            db.session.commit()
            return redirect(url_for('project_conf', addProj=addProj))

Tags: nameinpyformrequestminlengthmax
1条回答
网友
1楼 · 发布于 2024-05-03 13:03:42

我应该使用QuerySelectField和lambda,并在模型中添加repr。这对我很有效:

在表单.py在

coi_name = QuerySelectField(label='COI', query_factory=lambda: db.session.query(Coi).filter_by(active=1), get_pk=lambda coi_id: coi_id, get_label=lambda coi_name: coi_name, allow_blank=True)

在模型.py在

^{pr2}$

相关问题 更多 >