账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    flask WTF : 'StringField' object has no attribute 'content'
    29
    0

    问题描述

    在提交数据时,报错
    AttributeError: 'StringField' object has no attribute 'content'

    问题出现的环境背景及自己尝试过哪些方法

    form表单渲染正常,但是在填入数据后报错,

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)
    Form 代码

    class WeiboForm(FlaskForm):

    ''' 微博表单 '''
    content = StringField(label='微博内容:',
                          validators=[DataRequired("请输入微博内容")],
                          description="请输入微博内容",
                          render_kw={"required": "required", "class": "form-controal"})
    submit = SubmitField(
        label='发布',)
    
    
    def validate_content(self,field):
        """限制微博文字长度"""
        content = field.content
        if len(content) < 5:
            raise ValidationError("长度不能小于5个字")
        if len(content) > 140:
            raise ValidationError("长度不能大于140个字")
        return content
    
    def publish(self,user,db):
        """ 发送微博 """
        data=self.data
        #创建对象
        weibo=Weibo(
            content=data['content'],
            user_id=user.id,
            is_valid=datetime.new(),
            created_at=datetime.new()
        )
        db.session.add(weibo)
        db.session.commit()
        return weibo
    

    views代码
    @app.route('/home/weibo',methods=['GET','POST'])
    @login_required
    def weibo_publish():

    ''' 发布微博 '''
    form=WeiboForm()
    if form.validate_on_submit():
        #新增记录
        form.publish(user=current_user)
        #提示用户
        flash('发布成功')
        #跳转
        return redirect(url_for('index'))
    return render_template('/home/weibo.html',form=form)
    

    模板templates

    {% block content %}
    <div class="contanier">

    <div class="col-md-6 col-md-offset-3">
    <form class="form-weibo" role="form" method="post" action="{{ url_for('weibo_publish') }}">
        <div class="form-inner clearfix">
            <div class="form-header clearfix">
                <span class="pull-left">有什么新鲜事告诉大家?</span>
                <span class="pull-right">已输入21字</span>
            </div>
            {{ form.content }}
            <ul class="text-danger">
            {% for err in form.content.errors %}
            <li>{{ err }}</li>
            {% endfor %}
            </ul>
            <div class="pull-right">
            {{ form.csrf_token }}
            {{ form.submit }}
            </div>
        </div>
    </form>
    </div>

    </div>
    {% endblock %}

    你期待的结果是什么?实际看到的错误信息又是什么?

    求大神帮忙找问题?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部