当我将 POST 与 Flask 一起使用时,我遇到了 wtforms 选择字段的问题

     2023-02-23     179

关键词:

【中文标题】当我将 POST 与 Flask 一起使用时,我遇到了 wtforms 选择字段的问题【英文标题】:I'm having problems with wtforms selectfields when i use a POST with Flask 【发布时间】:2013-04-02 22:31:44 【问题描述】:

我对 wtforms 和烧瓶还很陌生,并且在使用 selectfields 时遇到了错误。表单本身在没有选择字段的情况下工作得很好,但有了它我得到以下错误:

错误:

....fields.py", line 386, in pre_validate
    for v, _ in self.choices: TypeError: 'NoneType' object is not iterable

我看到了选择域,所以它正在被渲染。我怀疑在 POST 上没有正确验证 id 并且没有返回任何内容。或者它与我返回的选择字段元组有关?此外,我使用的 ID 字段是从 GAE 的 ndb 自动 key().id() 中提取的,它相当长且令人讨厌。可能是用于选择字段的 id 长度太长?

谷歌搜索并没有提供太多关于确切问题的信息,所以我想我会在这里发布。相关代码如下。如果我遗漏了什么,请告诉我

views.py 代码:

@app.route('/new/post', methods = ['GET', 'POST'])
@login_required
def new_post():

    form = PostForm()
    if form.validate_on_submit():
        post = Post(title = form.title.data,
                    content = form.content.data,
                    hometest = form.hometest.data,
                    author = users.get_current_user())
        post.put()
        flash('Post saved on database.')
        return redirect(url_for('list_posts'))
    form.hometest.choices = [ (h.key.id(),h.homename)for h in Home.query()]

    return render_template('new_post.html', form=form)

myforms.py

class PostForm(Form):
    title = wtf.TextField('Title', validators=[validators.Required()])
    content = wtf.TextAreaField('Content', validators=[validators.Required()])
    hometest = wtf.SelectField(u'Home Name List', coerce=int,validators=[validators.optional()])

new_post.html:

% extends "base.html" %

% block content %
    <h1 id="">Write a post</h1>
    <form action=" url_for('new_post') " method="post" accept-charset="utf-8">
         form.csrf_token 
        <p>
            <label for="title"> form.title.label </label><br />
             form.title|safe <br />
            % if form.title.errors %
            <ul class="errors">
                % for error in form.title.errors %
                <li> error </li>
                % endfor %
            </ul>
            % endif %
        </p>
        <p>
            <label for="title">form.hometest.label</label><br/>
            form.hometest
            % if form.hometest.errors %
        <ul class="errors">
            % for error in form.hometest.errors %
            <li> error </li>
            % endfor %
        </ul>
        % endif %
        </p>
        <p>
            <label for="title"> form.content.label </label><br />
             form.content|safe <br />

            % if form.content.errors %
            <ul class="errors">
                % for error in form.content.errors %
                <li> error </li>
                % endfor %
            </ul>
            % endif %
        </p>
        <p><input type="submit" value="Save post"/></p>
    </form>
% endblock %

【问题讨论】:

【参考方案1】:

您需要在调用validate_on_submit 之前设置您的选择,因为form.validate 将尝试根据选择列表(即None 在您之前验证提供的值(如果有)设置choices):

form = PostForm()
form.hometest.choices = [(h.key.id(), h.homename) for h in Home.query()]

if form.validate_on_submit():
    # form is valid, continue

【讨论】:

如果您不想对其进行验证,如何使其跳过特定字段?我收到验证器=[validators.optional()] 的日期字段错误 值得用一个最小的、可重复的例子提出一个单独的问题。有人应该能够提供帮助:-) 这正是我通过这个答案解决的问题。 非常感谢!我正在努力解决同样的问题。移动 myform.choices= 不管 form.validate_on_submit () 修复它! 哦,谢谢!我正在处理这个错误一个小时,这正是我的问题的解决方案!【参考方案2】:

您应该提供choices=[...] 参数,例如

wtf.SelectField(u'Home Name List',
                choices=[(1, 'Label 1'),
                         (2, 'Label 2')],
                coerce=int,
                validators=[validators.optional()])

【讨论】:

看来您实际上不能使用 selectField 中的选择参数进行动态选择,如文档 wtforms.readthedocs.io/en/latest/... 中所示,因为即使您的选择参数在选择字段是wtf.SelectField(u'Home Name List', choices=[(h.key.id(), h.homename) for h in Home.query()], coerce=int) 中的查询,该查询不会在每次显示表单时运行.. 因此动态添加的 home 实例不会出现在下拉列表中.. 根据我的测试

当我将 setContentSize 与自动布局一起使用时,UIScrollView 崩溃

】当我将setContentSize与自动布局一起使用时,UIScrollView崩溃【英文标题】:UIScrollViewcrashwhenIusesetContentSizewithauto-layout【发布时间】:2013-03-1109:07:35【问题描述】:我有一个要放入UIScrollView的自定义UIView。我使用此代码:-(void)viewDi... 查看详情

当我将 RxSwift 的 DelegateProxy 与 FSCalendar 一起使用时发生错误

】当我将RxSwift的DelegateProxy与FSCalendar一起使用时发生错误【英文标题】:erroroccurredwhenIusingRxSwift\'sDelegateProxywithFSCalendar【发布时间】:2021-08-2111:16:53【问题描述】:RxFSCalendarDelegateProxy.swiftimportFoundationimportRxSwiftimportRxCocoaimp 查看详情

当我将 WholeTextFiles() 与 pyspark 一起使用时,为啥 AWS 拒绝我的连接?

】当我将WholeTextFiles()与pyspark一起使用时,为啥AWS拒绝我的连接?【英文标题】:WhyAWSisrejectingmyconnectionswhenIamusingwholeTextFiles()withpyspark?当我将WholeTextFiles()与pyspark一起使用时,为什么AWS拒绝我的连接?【发布时间】:2019-05-2215:03:... 查看详情

为啥当我将 SKSpriteNode 与图像一起使用时它不会反弹,但当我使用 SKShapeNode 时它确实有效?

】为啥当我将SKSpriteNode与图像一起使用时它不会反弹,但当我使用SKShapeNode时它确实有效?【英文标题】:WhywhenIuseSKSpriteNodewithanimageitdoesn\'tbouncebutwhenIuseSKShapeNodeitdoeswork?为什么当我将SKSpriteNode与图像一起使用时它不会反弹,但... 查看详情

当我将 Ajax 与 spring 控制器一起使用时,它会被重定向 [重复]

】当我将Ajax与spring控制器一起使用时,它会被重定向[重复]【英文标题】:WhenIuseAjaxwithspringcontrollerit\'sredirected[duplicate]【发布时间】:2021-11-2714:28:06【问题描述】:所以,我尝试创建一个SpringMVC应用程序,例如“Cinema”应用程... 查看详情

当我将域属性与子域值一起使用时,HttpOnly Cookie 不起作用

】当我将域属性与子域值一起使用时,HttpOnlyCookie不起作用【英文标题】:HttpOnlyCookienotworkingwhenIusethedomainattributewithasubdomainvalue【发布时间】:2021-12-2005:23:15【问题描述】:我正在使用ExpressJS来提供这个cookie,如下所示:res.cookie... 查看详情

当我将 viewpager 与 Indicator Android 一起使用时,将背景状态栏更改为背景 viewpager?

】当我将viewpager与IndicatorAndroid一起使用时,将背景状态栏更改为背景viewpager?【英文标题】:ChangebackgroundstatusbarlikeasbackgroundviewpagerwhenIusingviewpagerwithIndicatorAndroid?【发布时间】:2021-11-0918:09:33【问题描述】:当我滑动指示器时... 查看详情

当我将 PHP 与 Mysql 一起使用时,来自数据库的 URL 不正确

】当我将PHP与Mysql一起使用时,来自数据库的URL不正确【英文标题】:URLfromdatabaseisnotcorrectwheniusePHPwithMysql【发布时间】:2019-08-3119:39:56【问题描述】:我有带有URL的数据库。例如,我的网址是https://besplatka.ua/?prop[161][from]=1&pro... 查看详情

Hibernate + Java 性能较慢,但当我将 TOAD 与相同的本机 Oracle 查询一起使用时性能较快

】Hibernate+Java性能较慢,但当我将TOAD与相同的本机Oracle查询一起使用时性能较快【英文标题】:SlowperformanceonHibernate+JavabutfastwhenIuseTOADwiththesamenativeOraclequery【发布时间】:2012-12-2700:19:16【问题描述】:我检测到Oracle上的休眠和本... 查看详情

当我将 Django Celery apply_async 与 eta 一起使用时,它会立即完成工作

】当我将DjangoCeleryapply_async与eta一起使用时,它会立即完成工作【英文标题】:WhenIuseDjangoCeleryapply_asyncwitheta,itdoesthejobimmediately【发布时间】:2017-12-1810:18:59【问题描述】:我查看了celery文档并从中尝试了一些东西,但它不像示... 查看详情

使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?

】使用PHP时发布请求有效,但是当我将Axios与React一起使用时,它会失败并出现500内部错误,我该如何解决?【英文标题】:PostrequestworkswhenusePHP,butitfailswitha500InternalErrorwhenIuseAxioswithReact,howcanIfixthat?【发布时间】:2020-09-1011:00:18... 查看详情

当我将 event.preventDefault() 与 fetch api、express 和 node.js 一起使用时,为啥 req.body 返回 null? [复制]

】当我将event.preventDefault()与fetchapi、express和node.js一起使用时,为啥req.body返回null?[复制]【英文标题】:Whydoesreq.bodyreturnnullwhenIwasuseevent.preventDefault()withfetchapi,express,andnode.js?[duplicate]当我将event.preventDefault()与fetchapi 查看详情

交叉呼叫与 Post 一起工作,但在飞行前失败

...必须从我的网站向第三方域/服务器进行网络服务调用。当我使用jQueryAjaxbyPost方法和content-type:text/plain进行此调用时,它工作正常。但是当我将其更改为content-type:text 查看详情

Axios 数据在发送到 Flask POST 路由时以 ImmutableMultiDict([]) 的形式出现,但与 Postman 一起使用

...FlaskPOST路由时以ImmutableMultiDict([])的形式出现,但与Postman一起使用【英文标题】:AxiosdatacomingupasImmutableMultiDict([])whensenttoFlaskPOSTroute,butworkwithPostman【发布时间】:2019-07-2009:51:56【问题描述】:我正在使用Flask创建一个POST方法来在... 查看详情

当我将 IterativeImputer 与 KNeighborsClassifier 一起使用时出现错误“未知标签类型:'连续'”

】当我将IterativeImputer与KNeighborsClassifier一起使用时出现错误“未知标签类型:\\\'连续\\\'”【英文标题】:Error"Unknownlabeltype:\'continuous\'"whenIuseIterativeImputerwithKNeighborsClassifier当我将IterativeImputer与KNeighborsClassifier一起使用时... 查看详情

我创建了 lib.a 文件并添加了一些类、资源和图像。当我将此 lib 文件与头文件一起使用时,它会给出异常

】我创建了lib.a文件并添加了一些类、资源和图像。当我将此lib文件与头文件一起使用时,它会给出异常【英文标题】:Ihavecreatelib.afileandaddsomeclasses,resourceandimages.Wheniusethislibfilewithheaderfilethenitgivesexception【发布时间】:2012-01-1308... 查看详情

使用 Flask 和 Python 3 测试文件上传

...FlaskandPython3【发布时间】:2013-12-0312:17:15【问题描述】:我将Flask与Python3.3一起使用,我知道支持仍处于试验阶段,但在尝试测试文件上传时遇到了错误。我正在使用unittest.TestCase并基于我在我正在尝试的文档中看到的Python2.7示... 查看详情

与 Google App Engine 和 Flask 一起使用时,Angular 路由不起作用

】与GoogleAppEngine和Flask一起使用时,Angular路由不起作用【英文标题】:AngularroutenotworkingwhenusedwithGoogleAppEngineandFlask【发布时间】:2015-08-1423:10:38【问题描述】:我想做的事:我正在尝试在GoogleAppEngine上构建一个RESTfulFlask应用程序... 查看详情