我在努力解决两个问题
1/QuerySelectField未填充
2/填写字段时出现翻译错误
我有一个添加功能和编辑功能,我正在使用 “从WTF表单_炼金术.fieldsimport QuerySelectField”允许从下拉列表中的一个数据库模型中进行选择。在“addboilercircuit”功能中,它可以工作,在表单中显示一个下拉列表,我可以提交表单。在“editboilercircuit”函数中,我正在使用formpopulate\u obj填充所有字段接受QuerySelectField,一个下拉列表可见,但不显示保存的选项,如果我选择其中一个选项,然后提交,我会收到一条translate错误消息。 这是我的密码:
你知道吗表格.py你知道吗
def boiler_ID():
return Boilers.query
class AddBoilerCircuitForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
boiler_ID = QuerySelectField('Boiler_ID',
query_factory=boiler_ID,
get_label='id')
submit = SubmitField('Register')
你知道吗型号.py你知道吗
class Boilers(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
state = db.Column(db.String(9))
def __repr__(self):
return '<Boilers {}>'.format(self.id)
class Boilercircuit(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
boiler_ID = db.Column(db.String(30))
def __repr__(self):
return '<Boilercircuit {}>'.format(self.id)
你知道吗锅炉.py你知道吗
@bp.route('/boilers/editboilercircuit/<int:id>', methods=('GET', 'POST'))
@login_required
def editboilercircuit(id):
obj = Boilercircuit.query.get(id) or Boilers()
form = AddBoilerCircuitForm(request.form, obj=obj)
if form.validate_on_submit():
form.populate_obj(obj)
db.session.add(obj)
db.session.commit()
flash('Congratulations, you are have updated a Boiler Circuit!')
return redirect(url_for('boilers.boilercircuits'))
return render_template('boilers/editboilercircuit.html', title= 'edit boilercircuit',
form=form, obj=obj)
还有html 编辑电路.html你知道吗
<h2>Edit Boiler Circuit</h2>
<form action="" method="post">
{{ form.hidden_tag() }}
<div>{{ form.name.label }} {{ form.name(class="input") }}</div>
<div>{{ form.boiler_ID.label }} {{ form.boiler_ID(class="input") }}</div>
<div>{{ form.submit(class="submit") }}</div>
<form>
错误消息是
AttributeError: 'Boilers' object has no attribute 'translate'
在“addboilercircuit”函数上,这个工作正常,在我的视图函数中接受我必须向每个QuerySelectField添加str,以避免出现“translate error”这是我的代码
def addboilercircuit():
form = AddBoilerCircuitForm()
if form.validate_on_submit():
boilercircuit = Boilercircuit(name=form.name.data,
boiler_ID=str(form.boiler_ID.data), #here I have added "str"
我在所有论坛上都搜索过类似的问题,但大多数都与add函数有关,这有助于我清理代码(谢谢@sean)和其他许多代码。我希望我的问题很清楚 提前谢谢
保罗
这里要考虑的关键是,ORM支持的字段实际上处理ORM对象,而不是处理过的表单字段值的标量值。这方面的证据存在于传递给
QuerySelectField
构造函数的可调用查询中:这是一个返回
Boilers
实例而不是整数ID值的查询。你知道吗要对它进行排序,请将
relationship
字段添加到名为boiler
的模型中,并将表单字段与之关联。我们还需要在boilercircuit.boiler_ID
上添加一个外键,这样关系就可以建立到boilers
表的连接路径。你知道吗然后修改表单:
您还需要更改在整个视图和模板中对
AddBoilerCircuitForm.boiler_ID
的任何引用,因为该字段不再存在于表单中。你知道吗相关问题 更多 >
编程相关推荐