标签: wtforms

将 * 添加到必填字段的标签

我想在标签文本之前(或之后)添加“*”,以防需要提交。

我现在可以通过在我的模板中使用它来做到这一点:

{% for field in form %}
    <label for="{{ field.name }}">
    {{ '*' if field.flags.required }}{{ field.label.text }} :
    </label>
    {{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

有没有比这更好的方法,至少有一种方法可以避免手动添加标签元素?

python flask wtforms flask-wtforms

1
推荐指数
1
解决办法
1552
查看次数

How to bind a field in __init__ function of a form

class Example_Form(Form):
    field_1 = TextAreaField()
    field_2 = TextAreaField()

    def __init__(self, type, **kwargs):
        super(Example_Form, self).__init__(**kwargs)

        if type == 'type_1':
           self.field_3 = TextAreaField()
Run Code Online (Sandbox Code Playgroud)

In some scenarios I need to dynamically add fields into the form. The field_3 added to example form turns out to be a UnboundField. I tried to bind field_3 to form in __init__ function, but it won't work.

field_3 = TextAreaField()
field_3.bind(self, 'field_3')
Run Code Online (Sandbox Code Playgroud)

How to bind field_3 to example form?

python flask wtforms flask-wtforms

1
推荐指数
1
解决办法
1670
查看次数

WTForms 将小部件应用到 RadioField

我需要在 wtforms 中创建一行单选按钮。所以:

buttons = RadioField(choices=[(0, 'Option1), (1, 'Option2'), (2, 'Option3')])
Run Code Online (Sandbox Code Playgroud)

创建:

  • 选项1
  • 选项2
  • 选项3
  • 我想得到的是:

    选项1 选项2 选项3

    (由于某种原因,实际的单选按钮不会在此处呈现)意思是我想要一排单选按钮,而不是无序列表的按钮。

    在发布问题之前,我已经尝试自己解决问题。阅读这篇文章后:How can WTForms RadioField generated html without <ul> and <li> tag? 我在这里阅读了有关小部件和按钮的信息: https: //wtforms.readthedocs.io/en/stable/widgets.html#built-in-widgets 和这里: https: //wtforms.readthedocs.io/en/stable/ fields.html 似乎有一个内置小部件: class wtforms.widgets.Input(input_type=None) 可能会通过不将无序列表标记应用于单选按钮来解决问题。

    我尝试按如下方式应用它:

    buttons = RadioField(widget=Input(input_type='radio'), choices=[(0, 'Option1'), (1, 'Option2'), (2, 'Option3')])
    
    Run Code Online (Sandbox Code Playgroud)

    但我只收到错误: AttributeError: 'RadioField' object has no attribute '_value'

    我的问题是:

    • 输入小部件会将我的按钮显示为一行而不是列表吗?
    • 我该如何正确应用它?
    • 如果没有,还有其他解决方案可以按照我想要的方式显示按钮吗?

    html python jinja2 flask wtforms

    1
    推荐指数
    1
    解决办法
    1417
    查看次数

    AttributeError:'NoneType'对象没有属性'name'

    class Form(Form):
        def forms(self):
            name = TextField('name', validators=[Required()])
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            form = Form()
            self.render('index.html', form=form.forms())
    
    Run Code Online (Sandbox Code Playgroud)

    模板:

    <form method="post" action="/test">
        {% raw form.name(type='text') %}
    </form>
    
    Run Code Online (Sandbox Code Playgroud)

    错误:

    AttributeError:'NoneType'对象没有属性'name'


    但这有效,但是我需要在Form类中使用一个函数:

    class Form(Form):
          name = TextField('name', validators=[Required()])
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            form = Form()
            self.render('index.html', form=form)
    
    Run Code Online (Sandbox Code Playgroud)

    python tornado wtforms

    0
    推荐指数
    1
    解决办法
    8415
    查看次数

    WTForms 字段默认值突然不起作用

    我有以下代码:

    class ReconForm(Form):
        compressedFilePath = StringField('Compressed File Path', [validators.Required()] )
    
    Run Code Online (Sandbox Code Playgroud)

    我像这样实例化它:

    form = ReconForm()
    form.compressedFilePath.default = 'hey'
    
    Run Code Online (Sandbox Code Playgroud)

    它什么都不做。它曾经将默认值设置为 hey 但后来它停止了,我不知道为什么。

    如果我打印 form.compressedFilePath.default 然后它打印正确的值。如果我在字段构造函数中设置默认值,模板会呈现正确的值。否则它什么都不做,它让我发疯。

    我究竟做错了什么?

    flask wtforms flask-wtforms

    0
    推荐指数
    1
    解决办法
    3501
    查看次数

    将表单数据直接传递给SQLalchemy对象?

    我正在使用带有WTForms和SQLAlchemy的Flask.我目前有这个设置:

    一个SQLAlchemy类:

    class User(Base):
        __tablename__ = 'user'
        name = db.Column(db.String)
        last_name = db.Column(db.String)
    
        __init__(name, last_name):
            self.name = name
            self.last_name = last_name
    
    Run Code Online (Sandbox Code Playgroud)

    相应的表格:

    class CreateUserForm(Form):
        name = StringField('Name')
        last_name = StringField('Last name')
    
    Run Code Online (Sandbox Code Playgroud)

    路线:

    @user.route('/', methods=['POST'])
    def create():
        form = CreateUserForm(request.form)
    
        if form.validate():
            user = User(form.name.data, form.last_name.data)
            ...
    
    Run Code Online (Sandbox Code Playgroud)

    这只是一个简化的例子,但我想知道的是,如果我能以某种方式将表单变量传递给User构造函数并一直传递给SQLAlchemy中的User类?由于构造函数中的表单与用户数据库表中的字段相同,因此它会很好.

    我希望我的路线看起来像这样:

    @user.route('/', methods=['POST'])
    def create():
        form = CreateUserForm(request.form)
    
        if form.validate():
            user = User(form)
            ...
    
    Run Code Online (Sandbox Code Playgroud)

    所以我不必在每个部分中处理form.name和form.last_name.

    sqlalchemy flask wtforms

    0
    推荐指数
    1
    解决办法
    1570
    查看次数

    WTForms SelectMultipleField:禁用验证

    我有一个SelectMultipleField,它在运行时使用JavaScript进行填充/修改。我的问题是,这违反了验证程序,因此对form.validate_on_submit()始终的调用失败。

    SelectMultipleField('Test', coerce=int)
    
    Run Code Online (Sandbox Code Playgroud)

    我已经尝试设置不执行任何操作的自定义验证器:

    def dummy_validator(form, field):
        print("check: "+str(field.data))
    
    SelectMultipleField('Test', coerce=int, [dummy_validator])
    
    Run Code Online (Sandbox Code Playgroud)

    但是,这仍然失败。例如,我收到错误消息'7' is not a valid choice for this field

    使SelectMultipleField通过启动的验证过程需要什么form.validate_on_submit()

    validation python-3.x wtforms

    0
    推荐指数
    1
    解决办法
    727
    查看次数

    为什么 Flask-Admin 在尝试编辑模型时会抛出此异常?

    例外是AttributeError: 'StringField' object has no attribute 'wrap_formdata',它似乎只发生在我从 Flask-Admin 仪表板创建或编辑以下两个模型中的任何一个时:

    class Experiment(db.Model):
        id = db.Column(db.Integer, primary_key=True)
    
        property_id = db.Column(db.Integer,
                                db.ForeignKey('property.id'),
                                index=True,
                                nullable=False)
    
        name = db.Column(db.String, nullable=False)
    
        start_date = db.Column(db.DateTime, nullable=True)
        end_date = db.Column(db.DateTime, nullable=True)
        status = db.Column(db.String, nullable=False, default='Draft')
    
        title = db.Column(db.String)
        meta = db.Column(db.String)
        seed_uri = db.Column(db.String)
    
        targets = db.Column(postgresql.JSON)
        variations_json = db.Column(postgresql.JSON)
    
        variations = db.relationship('ExperimentVariation',
                                      backref='experiment',
                                      cascade='save-update, merge, delete')
    
        def __repr__(self):
            repr_fmt = '<Experiment {id}, {property_id} {name}>'
            return repr_fmt.format(id=self.id,
                                   property_id=self.property_id,
                                   name=self.name)
    
    
    class ExperimentVariation(db.Model):
        id = db.Column(db.Integer, primary_key=True) …
    Run Code Online (Sandbox Code Playgroud)

    sqlalchemy wtforms flask-sqlalchemy flask-wtforms flask-admin

    0
    推荐指数
    1
    解决办法
    1114
    查看次数

    使用SQL查询填充WTForms SelectField

    我想用此查询返回的行填充WTForms SelectField:

    cur.execute("SELECT length FROM skipakke_alpin_ski WHERE stock > 0")
    
    Run Code Online (Sandbox Code Playgroud)

    该查询返回具有不同类型滑雪板的滑雪板长度的行。cur.fetchall()返回以下元组:

    [(70,), (75,), (82,), (88,), (105,), (115,), (125,), (132,), (140,), (150,), (160,), (170,)]
    
    Run Code Online (Sandbox Code Playgroud)

    我将如何将这些数字添加到中SelectField,以便每个滑雪板长度成为其自己的可选选择?如果我手动完成此操作,则将执行以下操作:

    ski_size = SelectField('Ski size', choices=['70', '70', '75', '75'])
    
    Run Code Online (Sandbox Code Playgroud)

    ...对于所有不同的长度,依此类推。

    python mysql sqlite flask wtforms

    0
    推荐指数
    2
    解决办法
    2936
    查看次数

    如何在 jinja2 模板中使用占位符?

    我正在flask中创建一个联系表单,我想在jinja2中使用html占位符,如何在jinja 2中使用html占位符?

    <form action="{{ url_for('contact_page') }}" class="col-md-6 mx-auto my-auto mt-3" method="POST">
    
    {{ form.hidden_tag() }}
    
    <p class="text-left">{{ form.name.label() }}</p>
    {{ form.name(class="form-control mb-2") }}
    
    <p class="text-left">{{ form.email.label() }}</p>
    {{ form.email(class="form-control mb-2") }}
    
    <p class="text-left">{{ form.subject.label() }}</p>
    {{ form.subject(class="form-control mb-2") }}
    
    <p class="text-left">{{ form.message.label() }}</p>
    {{ form.message(class="form-control mb-3") }}
    
    <div class="form-group">
    {{ form.submit(class="btn btn-primary btn-round mt-4 ") }}
    </div>
    </form>
    
    Run Code Online (Sandbox Code Playgroud)

    python flask wtforms flask-wtforms

    0
    推荐指数
    1
    解决办法
    2313
    查看次数

    验证wtfforms中的美国电话号码

    我正在使用烧瓶应用程序并使用wtforms:

    class RegisterForm(Form):
        username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
        email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
        phone = StringField('Phone', validators=[DataRequired(), Length(10)])
    
    Run Code Online (Sandbox Code Playgroud)

    我刚刚添加了手机,正在寻找验证美国号码的方法.我遇到了http://wtforms-components.readthedocs.org/en/stable/#phonenumberfield,但这似乎不再有phonenumberfield了.什么是使用wtfforms处理此问题的最佳方法?

    编辑课程:

    class RegisterForm(Form):
        username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
        email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
        phone = StringField('Phone', validators=[DataRequired(),validate_phone('RegisterForm','phone'), Length(min=6, max=40)])
    
        def validate_phone(form, field):
            if len(field.data) > 16:
                raise ValidationError('Invalid phone number.')
            try:
                input_number = phonenumbers.parse(field.data)
                if not (phonenumbers.is_valid_number(input_number)):
                    raise ValidationError('Invalid phone number.')
            except:
                input_number = phonenumbers.parse("+1"+field.data)
                if not (phonenumbers.is_valid_number(input_number)):
                    raise ValidationError('Invalid phone number.')
    
    Run Code Online (Sandbox Code Playgroud)

    python flask wtforms

    -1
    推荐指数
    1
    解决办法
    3705
    查看次数