当前位置: 首页 > 面试题库 >

如何在烧瓶中使用QuerySelectField?

查飞星
2023-03-14
问题内容

我试图用一个烧瓶形式的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

我真正想要的是,选择字段显示作者姓名及其编号,然后将作者编号返回至应用程序(返回至位于头的名为“ add_author”的函数)。

谢谢。


问题答案:

您有两个问题:

  1. 正如肖恩·维埃拉(Sean Vieira)在回答中指出的那样,query_factory回调应返回查询,而不是结果。

  2. query_factory回调应该返回完整实体,你的情况的书籍,而不是书籍ID。我相信QuerySelectField必须尝试使用​​查询结果,就像它们是映射对象一样,而id(返回为KeyedTuple实例)则不是。

我认为这是编写回调函数的正确方法:

def possible_book():
    return Book.query


 类似资料:
  • 问题内容: 我对Flask和Matplotlib非常陌生。我希望能够显示我在某些html中生成的简单图表,但是我很难弄清楚该怎么做。这是我的Python代码: 这是我的HTML: 问题答案: 您可以在Flask URL路由处理程序中即时生成图像: 然后,您需要将图像包含在HTML模板中:

  • 我基本上使用了install命令“$pip install Flask”,当我试图运行一个程序时,它会说“找不到模块”Flask安装在“/usr/local/lib/python2.7/site包”中,但我认为pip的意义在于,我可以到处导入这些包。我试图在我的桌面上运行一个文件,甚至当我将Flask文件夹移动到桌面上时,它也不起作用。有什么建议吗?谢谢

  • 问题内容: 例如,此URL: 应该返回一个MIME类型的响应。我有两个静态图像, 如果type为1,则应返回,否则返回。在烧瓶中怎么做? 问题答案: 您使用类似 发送回或,具体取决于类型查询参数。有关更多信息,请参见函数和对象的文档。

  • 这是我的代码: 但是,当我从浏览器向服务器发出请求时,会出现以下错误: 我也尝试过这种方法,在请求之后设置响应头: 没有骰子。我得到同样的错误。有没有办法只在路由函数中设置响应头?像这样的东西是理想的: 但是我无论如何也找不到这样做。请帮忙。 编辑 如果我卷曲的url与POST请求这样: 我得到的答复是: 有什么想法吗?

  • 在页面上,如果用户进行了身份验证,我想发出一个post请求。为此,我有以下代码。 在打印“legal_login”之后立即发生的事情是,我得到错误消息< code>TypeError: 'Request '对象不可调用。如何使用flask发出post请求?

  • 我已经用flask在python上制作了一个restapi(端口:5000),我正在从一个网站(端口:80)发出get和post请求。我收到了cors错误,所以我尝试在RESTAPI中为站点创建一个响应头。但是我得到了导入错误: 我已经下载了烧瓶cors模块并升级它,并确保它是在正确的路径,但它仍然不工作。 API代码: