- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
将两个表链接在一起并尝试创建一个包含外键的表单。
sqlalchemy.exc.InterfaceError
InterfaceError:无法打印的 InterfaceError 对象
数据库链接完成为:
class Client(db.Model):
__tablename__ = 'Client'
..
stand_id = db.Column(db.String(10), index = True, unique = True)
stands = db.relationship('Stand', backref= 'Stand', lazy='select')
def __init__(self,client_name,contact_number,contact_name,contact_email,stand_id):
self.client_name = client_name
self.contact_number = contact_number
self.contact_email = contact_email
self.contact_name = contact_name
self.stand_id = stand_id
class Stand(db.Model):
__tablename__ = 'Stand'
..
stand_number = db.Column(db.String(10), db.ForeignKey('Client.stand_id' ))
def __repr__(self):
return '<Stand %r>' % (self.stand_id)
def __init__(self, stand_name,items, quantity,install_date,
derig_date,comments,last_update, stand_number):
self.stand_name = stand_name
self.items = items
self.quantity = quantity
self.install_date = install_date
self.derig_date = derig_date
self.comments = comments
self.last_update = last_update
self.stand_number = stand_number
形式为
class StandForm(Form):
stand_name = TextField('stand_name', validators = [Required()])
items = TextAreaField('items', validators = [Required()])
quantity = TextAreaField('quantity', validators = [Required()])
install_date = TextField('install_date',validators = [Required()])
derig_date = TextField('derig_date', validators = [Required()])
comments = TextField('comments', validators = [Required()])
last_update = TextField('last_update', validators = [Required()])
stand_number = QuerySelectField(query_factory=lambda: Client.query.all())
和查看为
@app.route('/newstand', methods = ['GET','POST'])
def newstand():
form = StandForm()
if form.validate():
stand = Stand(
request.form['stand_name'], request.form['items'], request.form['quantity'],
request.form['install_date'],request.form['derig_date'], request.form['comments'],
request.form['last_update'], request.form['stand_number'])
form.populate_obj(stand)
db.session.add(stand)
db.session.commit()
return render_template('liststands.html',
stand = stand,
form=form)
else:
flash("Your form contained errors")
return render_template('newstand.html', form = form
我觉得我写的函数不太对,有什么意见/帮助吗?
最佳答案
我刚刚遇到了同样的错误,看起来它可能是一个类似的问题。QuerySelectField
返回完整的对象,而不仅仅是 ID。对于上面的例子:
重命名表单域以反射(reflect)它包含的内容:
class StandForm(Form):
...
stand = QuerySelectField(query_factory=lambda: Client.query.all())
并在您的 View 中构造对象时使用 ID:
@app.route('/newstand', methods = ['GET','POST'])
def newstand():
form = StandForm()
if form.validate():
stand = Stand(
request.form['stand_name'], request.form['items'], request.form['quantity'],
request.form['install_date'],request.form['derig_date'], request.form['comments'],
request.form['last_update'], request.form['stand'].stand_id)
...
另外,上面的例子既显式地构造了带有表单内容的Stand
对象,又通过调用form.populate_obj
,这可能是多余的(它将填充对象上的所有相同字段),因此可能会删除其中一个。
如果 form.populate_obj
自动尊重外键(我假设它确实如此,虽然我没有尝试过),那么你可以将你的 View 代码简化为:
@app.route('/newstand', methods = ['GET','POST'])
def newstand():
form = StandForm()
if form.validate():
stand = Stand()
form.populate_obj(stand)
...
关于python - 错误信息 : InterfaceError: <unprintable InterfaceError object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208641/
我试图在 python 2.7 中定义我自己的异常类,派生自 BaseException。 class NestedCommentException(BaseException): """
将两个表链接在一起并尝试创建一个包含外键的表单。 sqlalchemy.exc.InterfaceError InterfaceError:无法打印的 InterfaceError 对象 数据库链接完
我正在 Flask 中设置一个应用程序,我刚刚将一个新表“StudyGroup”引入到我的数据库架构中。我仍在测试,所以我只是删除创建加载数据库,直到一切正常。我在我的用户模型中使用 Flask-Se
我在使用 mysql-connector 接收要插入 mysql 数据库的项目的脚本上随机遇到此异常: Traceback (most recent call last): File "/opt/
我正在试用 Flask,但出现错误 sqlalchemy.exc.InterfaceError: 在提交 wtforms 时。模型类是: class Post(db.Model): __tablen
我正在开发一款允许用户粘贴文本然后应用处理该文本的应用。 对于某个文本字符串,我收到“在源文件中找到不可打印的 ascii 字符”错误。不可打印的字符似乎是一个制表符,但我不确定。无论如何,当我尝试处
我是一名优秀的程序员,十分优秀!