Kil*_*ail 2 postgresql flask wtforms flask-wtforms
我的数据库是Postgres实例。我的模型定义为:
from app import db
class Device(db.Model):
__tablename__ = 'device'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String())
Run Code Online (Sandbox Code Playgroud)
我的来源定义为:
from flask_wtf import FlaskForm
from wtforms import StringField
class EditDevices(FlaskForm):
device_name = StringField("Device Name", validators=[])
submit = SubmitField['Submit']
Run Code Online (Sandbox Code Playgroud)
我收到以下形式的错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'StringField' [SQL: 'UPDATE device SET name=%(name)s WHERE device.id = %(device_id)s'] [parameters: {'name': <wtforms.fields.core.StringField object at 0x110580c18>, 'device_id': 208}]
Run Code Online (Sandbox Code Playgroud)
任何想法,我要去哪里错了?
您的代码不完整-您没有显示实际尝试在何处设置模型数据并将其保存到数据库中,但是错误显示<wtforms.fields.core.StringField object at 0x110580c18>您正在为name属性设置的值,因此您可能会这样做:
device = Device()
device.name = form.device_name
db.session.add(device)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
这将导致类似于您所看到的错误,因为您希望用户提交的数据form.device_name是一个StringField。要从form元素获取数据,您需要使用.data属性:
device = Device()
device.name = form.device_name.data
db.session.add(device)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |