WTForms:我似乎无法动态地为 QuerySelectField 提供默认值

2024-04-05

我有一个看起来像这样的表格:

class AddProductForm(Form):
    title = TextField('Title')
    type = QuerySelectField('Type',
        query_factory=lambda: ProductType.query.order_by(ProductType.sequence).all())

    def __init__(self, formdata=None, obj=None, prefix='', **kwargs):
        try:
            product_type_id = ProductType.query.filter_by(name=obj['product_type']).one().product_type_id
            kwargs.setdefault('type', product_type_id)
        except NoResultFound:
            pass

        Form.__init__(self, formdata, obj, prefix, **kwargs)

正如您所看到的,我试图将其设置为在加载表单时为 Product_type 提供合理的默认值。然而,虽然这种代码适用于设置标题作为示例,但它不适用于 QuerySelectField“类型”。有人知道我该如何解决这个问题吗?

假设这是不可能的,有谁知道我如何动态地将表单元素添加到表单中?


要在 WTForms 的 QuerySelectField 中定义默认值,可以直接在字段定义中执行:

my_field = QuerySelectField(
    label=u"My Label",
    query_factory=lambda: Model.query(...),
    get_pk=lambda item: item.id,
    get_label=lambda item: item.name,
    allow_blank=True,
    default=lambda: Model.query.filter(...).one())

然而,它并不像看起来那么简单。考虑到这一点:

  • 默认值必须是callable
  • 此可调用对象必须返回模型的对象实例(不是其 pk,而是整个对象)
  • 仅当没有时才会使用obj or formdata用于初始化表单实例(在这两种情况下,默认值都会被忽略)

在您的情况下,由于您正在使用初始化时手头没有的 obj 属性来初始化默认值,因此您可以改用工厂:

def add_product_form_factory(default_type_name):
    class AddProductForm(Form):
        title = TextField('Title')
        type = QuerySelectField('Type',
            query_factory=lambda: ProductType.query.order_by(ProductType.sequence).all(),
            default=ProductType.query.filter_by(name=default_type_name).one()
        )
    return AddProductForm

这里有一个根据参数组成表单的函数(在这种情况下,您不需要默认是可调用的):

AddProductForm = add_product_form_factory(default_type_name='foo')
form = AddProductForm()

附:表单工厂的好处是您可以动态地使用表单,在运行时创建字段或设置选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WTForms:我似乎无法动态地为 QuerySelectField 提供默认值 的相关文章

  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 尝试从网页Python和BeautifulSoup获取编码

    我试图从网页检索字符集 这会一直改变 目前我使用 beautifulSoup 来解析页面 然后从标题中提取字符集 这工作正常 直到我遇到一个网站 到目前为止 我的代码以及与其他页面一起使用的代码是 def get encoding soup
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 确定分割形状几何体的“左”侧和“右”侧

    我的问题是 我怎样才能确定哪一个Aside and Bside的侧面已经分割的旋转矩形几何体 http nbviewer jupyter org urls dl dropbox com s ll3mchnx0jwzjnf determine
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged

随机推荐

  • 如何显示带有深色背景的弹出消息

    我将在我的程序中显示一条错误消息 我希望我的消息如下图所示 如您所见 我需要在弹出消息时显示黑色阴影 我遵循两种解决方案来执行此操作 1 我截取程序的屏幕截图 并将其与黑色混合 有点暗 然后将其附加到面板并显示面板 然后弹出消息表单 它不起
  • 如何阻止孩子传播由实时/委托侦听器触发的事件?

    我有一个委托父级 用于侦听具有特定类别的一组子级中的单击事件 toggle group on click toggle function e 这是 html 的一个例子 div class toggle group a class togg
  • DB2 错误 字符串列、主变量、常量或函数的使用不当

    我正在尝试搜索所有表和列中的某个值 并且使用 php 连接到 IBM DB2 数据库 我想知道该错误是否是由于多次使用联合造成的 这是我的错误消息 Improper use of a string column host variable
  • 以提升用户身份在 wix 中运行 CustomAction

    据我所知 WiX 支持两种 CustomActions 延迟 运行此操作的用户 默认情况下 被提升 但它不是运行安装的用户 例如 LocalSystem 或类似的用户 立即 运行此操作的用户 默认情况下 未提升 这是首先运行安装程序的用户
  • Node 中的 aes-128-gcm “状态不受支持或无法验证数据”

    我正在尝试使用节点加密提供的 aes 128 gcm 来实现加密 解密功能 根据我的理解 gcm 会加密密文 但也会对其进行哈希处理 并将其提供为 身份验证标签 但是 我不断收到错误 状态不受支持或无法验证数据 我不确定这是否是我的代码中的
  • Spring数据剩余排序字段带有下划线

    我们正在使用一个非常简单的设置 RepositoryRestResource在一个上面PagingAndSortingRepository连接到 postgres 数据库 我们还配置了spring jackson property nami
  • OS X 上的 libpng 框架

    我正在寻找一个 Xcode 项目文件 它可以让我轻松地为 libpng 构建一个动态框架以嵌入 Mac OS X 应用程序包中 我发现 但我需要一些相当当前的东西 我可以自己制作项目文件 但如果不需要 我宁愿不重新发明轮子 这是否已经存在
  • C# 鼠标在窗体外移动[重复]

    这个问题在这里已经有答案了 我正在尝试在代码中跟踪鼠标移动 在表单窗口中跟踪鼠标移动很容易 但我想在窗口外跟踪鼠标移动 我的意思是我会最小化我的 从 到托盘并跟踪它的位置 知道如何使用示例代码或示例说明链接跟踪表单窗口之外的鼠标移动吗 我正
  • Javascript Azure Function 使用 SendGrid 发送电子邮件

    我想使用 SendGrid 从 Azure 函数 Javascript 发送电子邮件 我做了以下事情 为 SendGrid API 密钥创建了一个新的 AppSettings Azure Function 的 SendGrid 输出绑定集
  • 您知道 HTML 片段验证器吗?

    我正在寻找一种工具 可以让我检查某个 HTML 片段在适当的上下文中是否有效 我会输入类似的内容 dd my definition div div inside lt dd gt is allowed div dd 而不是整个文档 普通验证
  • iOS 6 - Facebook 共享过程失败并出现错误“代理应用程序尚未安装”

    虽然 有这样一个问题Facebook 错误 7 iOS 6 https stackoverflow com questions 12498972 facebook error 7 ios 6已经关闭了 没有任何答复 在获取用户 Facebo
  • 找出 maxClauseCount 设置为 1024 错误的原因

    我有两组搜索索引 TestIndex 在我们的测试环境中使用 和ProdIndex 在生产环境中使用 Lucene 搜索查询 date 20090410184806 TO 20091007184806 对于测试索引工作正常 但对于 Prod
  • 更改 SQL Server Management Studio 中自动恢复信息的位置

    我们的本地 IT 在网络路径上有 我的文档 文件夹 这会导致 MSQL Server Management Studio 出现问题 因为它每 10 分钟保存一次自动恢复信息 并且在保存时会锁定 我找到了 VS2008 保存其设置的位置 但我
  • 如何更改 python 应用程序引擎中日志消息的默认格式?

    我想默认在来自请求处理程序的日志消息中记录模块和类名 通常的方法似乎是通过调用来设置自定义格式字符串logging basicConfig 但这只能调用一次 并且在我的代码运行时已经被调用 另一种方法是创建一个新日志Handler可以传递一
  • Google 地方信息自动完成功能不适用于动态生成的输入元素

    自动完成功能在多个静态输入字段上完美运行 但是 当我通过按钮添加输入字段时 自动完成功能不适用于这些输入字段 也许问题出在闭包上 但我不确定 因为我的 JavaScript 很弱 谁能帮我 这是代码
  • Jenkins 构建步骤超时

    在 Jenkins 中 有没有办法为每个或选定的构建步骤提供不同的超时 构建时插件提供了完整项目上的超时 如果卡住则中止构建 功能 我需要的是为每个步骤提供不同的超时 这样我就可以使我的流程更加高效 如果您使用 Jenkins 管道 并且较
  • 在 Laravel 8 新安装中,“mix”不被识别为内部或外部命令

    我安装了一个新的 Laravel 8 应用程序 然后我运行 npm install 后来我就跑了 npm run dev 我收到以下错误 mix 未被识别为内部或外部命令 gt dev E wamp64 www Laravel8Projec
  • 如何用mysql+PDO中的数据制作婴儿生长图表

    I am trying to make a chart with growth baby table I have in DB I lost the idea and right now I don t know how to do it
  • 如何删除源代码树中的 .svn 文件夹?

    我已将 svn 中的源代码检出到我的 Linux PC 中 在每个子文件夹中都有一个 svn 文件夹 现在我想知道如何删除树中各处的该文件夹 svn 假设你使用的是Unix平台 并且可以使用bash find name svn type d
  • WTForms:我似乎无法动态地为 QuerySelectField 提供默认值

    我有一个看起来像这样的表格 class AddProductForm Form title TextField Title type QuerySelectField Type query factory lambda ProductTyp