我试图用一个烧瓶形式的sqlalchemy请求的结果填充选择字段。
这是代码:
def possible_book():
return Book.query.with_entities(Book.id).all()
class AuthorForm(Form):
familyname = TextField('familyname', [validators.Required()])
firstname = TextField('firstname', [validators.Required()])
book_list = QuerySelectField('book_list',query_factory=possible_book,get_label='title',allow_blank=True)
这是模板:
<form action="" method="post" name="edit_author" enctype="multipart/form-data">
{{form.hidden_tag()}}
<p>Veuillez donner son prénom (obligatoire) : {{form.firstname(value=author.firstname)}}</p>
<p>Nom de famille (obligatoire) : {{form.familyname(value=author.familyname)}}</p>
<p>Livre : {{form.book_list}}</p>
<p><input type="submit" value="Envoyer"></p>
</form>
查看:
@app.route('/edit_author/<number>', methods = ['GET', 'POST'])
def edit_author(number):
if number == 'new':
author = []
else:
author = Author.query.filter_by(id = number).first()
form = AuthorForm()
if form.validate_on_submit():
a = Author(firstname= form.firstname.data, familyname= form.familyname.data)
a.books = form.book_list.data
db.session.add(a)
db.session.commit()
return redirect('/admin')
return render_template('edit_author.html', form = form, author = author)
模型(仅粘贴了关联表和作者表,很多列都不用了)
author_book = db.Table('author_book',
db.Column('author', db.Integer, db.ForeignKey('author.id')),
db.Column('book', db.Integer, db.ForeignKey('book.id'))
)
class Author(db.Model):
id = db.Column(db.Integer, primary_key = True)
firstname = db.Column(db.String(64), index = True)
familyname = db.Column(db.String(120), index = True)
website = db.Column(db.String(120))
dateofbirth = db.Column(db.DateTime)
placeofbirth = db.Column(db.String(120))
nationality = db.Column(db.String(120))
biography = db.Column(db.Text)
photo = db.Column(db.String(120))
books = db.relationship('Book', secondary=author_book,backref=db.backref('author', lazy='dynamic'))
我目前收到此错误:
UnmappedInstanceError: Class 'sqlalchemy.util._collections.KeyedTuple' is not mapped
我真正想要的是select字段显示作者姓名及其编号,然后将作者编号返回到应用程序(返回到头上名为“ add_author”的函数)。
你有两个问题:
正如肖恩·维埃拉(Sean Vieira)在回答中指出的那样,query_factory
回调应返回查询而不是结果。
该query_factory
回调应该返回完整实体,你的情况的书籍,而不是书籍ID。我认为QuerySelectField
必须尝试使用查询结果,就好像它们是映射对象一样,而id(返回为KeyedTuple实例)则不是。
我认为这是编写回调函数的正确方法:
def possible_book():
return Book.query
问题内容: 好的,所以我已经安装了Flask,我想知道如何将MongoDB数据库与即将开始构建的Flask应用程序连接和使用。 问题答案: 我个人发现PyMongo库简单易用。 你首先需要导入并创建一个连接: 然后获取你的数据库实例和集合(表): 然后,你可以通过处理保存数据的JSON文档来操纵数据。他们的网站上有完整的示例。
问题内容: 据我了解Flask中的g变量,它应该为我提供一个存放数据的全局位置,例如在登录后保留当前用户。它是否正确? 我希望导航后在整个网站上显示我的用户名。 我的意见包含 登录期间,我分配 看来我无法访问g.user。相反,当我的base.html模板具有以下内容时… 我得到错误: 否则登录正常。我想念什么? 问题答案: 是本地线程,并且是每个请求的内容(请参阅代理说明)。该是还当地一个线程,
问题内容: 我已经像这样设置了Flask Restful: 我想在内部重定向到端点。 但是当我尝试这样做时: 我有一个例外。 问题答案: 你需要为网址的一部分指定一个值: 或者你可以使用,它需要资源:
问题内容: 我正在尝试使用jquery提出跨源请求,但它一直被消息拒绝 XMLHttpRequest无法加载http:// …请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不能访问Origin…。 我正在使用flask,heroku和jquery 客户端代码如下所示: 在heroku方面,我正在使用flask,就像这样 问题答案: 当我部署到Heroku
问题内容: 我已经安装了Apache服务器,并且正在通过mod_wsgi处理Flask响应。我已经通过别名注册了WSGI脚本: [httpd.conf] 我在上面的路径中添加了相应的WSGI文件: [/mnt/www/wsgi-scripts/service.wsgi] 我有一个简单的Flask Python测试脚本,提供了服务模块: [/mnt/www/wsgi-scripts/service.
问题内容: 有人可以在Flask中共享有关如何访问MySQL数据库的示例代码吗?已经有文档显示了如何连接到sqlite,但是没有连接到MySQL。 提前非常感谢你 问题答案: