1 回答
TA贡献1788条经验 获得超4个赞
这里要考虑的关键是 ORM 支持的字段实际上处理的是 ORM 对象,而不是处理的表单字段值的标量值。这一点的证据在您传递给QuerySelectField构造函数的可调用查询中:
def boiler_ID():
return Boilers.query
这是一个返回Boilers实例而不是整数 ID 值的查询。
要对其进行排序,relationship请在您的模型上添加一个字段,boiler并将您的表单字段与该字段相关联。我们还需要添加一个外键,boilercircuit.boiler_ID以便关系可以建立到boilers表的连接路径。
# adds a `ForeignKey` constraint to `boiler_ID` and a `boiler`
# relationship to your `BoilerCircuit` object.
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), db.ForeignKey("boilers.id"))
boiler = db.relationship("Boilers")
def __repr__(self):
return '<Boilercircuit {}>'.format(self.id)
然后修改表格:
# renames the `boiler_ID` field to `boiler` and also the field's label.
class AddBoilerCircuitForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
boiler = QuerySelectField('boiler',
query_factory=boiler_ID,
get_label='id')
submit = SubmitField('Register')
您还需要更改您在AddBoilerCircuitForm.boiler_ID整个视图和模板中所做的任何引用,因为该字段不再存在于表单中。
添加回答
举报