标签: flask-wtforms

将CSS类添加到WTForms SelectField中的选项

任何人都可以告诉我如何将css类分配给选择值.我想用小图像改变每个选项的背景,那么我怎么能用wtforms和css做呢?

class RegisterForm(Form):
    username = TextField('username', [validators.Length(min=3, max=50), validators.Required()])
    img_url = SelectField('avatar', 
            choices=[('static/images/avatars/1.jpg', '1'), 
                ('static/images/avatars/2.jpg', '2'),
                ('static/images/avatars/3.jpg', '3'), 
                ('static/images/avatars/4.jpg', '4'),
                ('static/images/avatars/5.jpg', '5'), 
                ('static/images/avatars/6.jpg', '6'),
                ('static/images/avatars/7.jpg', '7'), 
                ('static/images/avatars/8.jpg', '8'),
                ('static/images/avatars/9.jpg', '9'), 
                ('static/images/avatars/10.jpg','10')])
Run Code Online (Sandbox Code Playgroud)

css python flask wtforms flask-wtforms

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

Flask-WTF表单成功发布,但验证永远不会发生

我已经在WTF表格上挣扎了很长一段时间了.但是这个错误,似乎永远不会消失.我什么时候尝试运行此代码,表单永远不会验证

意见:

@bundle.route('/content/add/', methods=['GET', 'POST'])
@bundle.route('/content/add', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>/', methods=['GET', 'POST'])
@bundle.route('/content/edit/<posturl>', methods=['GET', 'POST'])
@fas_login_required
def addcontent(posturl=None):
    form = CreateContent()
    form_action = url_for('content.addcontent')
    if posturl is not None:
        content = Content.query.filter_by(slug=posturl).first_or_404()
        form = CreateContent(obj=content)
        if form.slug.data == posturl and request.method == 'POST' and form.validate():
            form.populate_obj(content)
            db.session.commit()
            return redirect(url_for('content.addcontent',
                                    posturl=posturl, updated="True"))

    else:
        if request.method == 'POST' and form.validate():
            query = Content(form.title.data,
                            form.slug.data,
                            form.description.data,
                            form.media_added_ids.data,
                            form.active.data,
                            form.tags.data,
                            g.fas_user['username'],
                            form.type_content.data
                            )
            try:
                db.session.add(query)
                db.session.commit()
                # Duplicate entry
            except Exception as e:
                return str(e) …
Run Code Online (Sandbox Code Playgroud)

python wtforms flask-sqlalchemy flask-wtforms

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

如何在不刷新页面的情况下在烧瓶中创建链式选择域?

我目前正在使用wtf处理地址表单,其中包含Country,State,City ..等等.数据库全部使用FK设置.

class Country(db.Model):
    __tablename__ = 'countries'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='countries', lazy='dynamic')
class City(db.Model):
    __tablename__ = 'cities'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    countries_id = db.Column(db.Integer, db.ForeignKey('countries.id')) 
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试实现链式选择域排序效果以优化用户体验.期望的效果是在不离开或刷新页面的情况下根据先前的选择字段使选择字段拉取数据.

例如,用户在国家中选择澳大利亚,然后国家的第二个选择区域应仅包含澳大利亚的州.

我已经对这个主题做了一些研究,但是无法提出令人满意的解决方案.以下是我发现的两种可能尚未解决的解决方案.

1.使用jQuery-plugin,例如Chained.但是,这个插件需要逐行编码.如果我采用这种解决方案,那么至少会有另外400多条线路,这不是非常pythonic.例如:

<select id="series" name="series">
  <option value="">--</option>
  <option value="series-3" class="bmw">3 series</option>
  <option value="series-5" class="bmw">5 series</option>
  <option value="series-6" class="bmw">6 series</option>
  <option value="a3" class="audi">A3</option>
  <option value="a4" class="audi">A4</option>
  <option value="a5" class="audi">A5</option>
</select>
Run Code Online (Sandbox Code Playgroud)

2.使用Wtf的"选择具有动态选择值的字段",这也是不可取的,因为它只根据前一个选择字段的默认值拉取数据一次.例如:如果国家/地区的默认选择字段是澳大利亚,则州选择字段仅包含澳大利亚境内的州.当你改变国家选择字段说到美国时,州选择字段仍然只包含澳大利亚境内的州.下面是wtf文档中列出的此方法的教程:

class UserDetails(Form):
    group_id = SelectField(u'Group', coerce=int)

def edit_user(request, id):
    user = …
Run Code Online (Sandbox Code Playgroud)

python jquery jinja2 flask flask-wtforms

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

使用WTForms不更新的动态选择字段

我正在尝试使用wtforms和sqlalchemy创建一个动态选择字段,但是当从数据库中插入或删除项目时它不会更新.这是我的代码:

class UserForm(Form):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    job = SelectField(
        'Job',
        validators=[DataRequired()],
        choices=[(a.id, a.name) for a in Job.query.order_by(Job.name)]
    )
Run Code Online (Sandbox Code Playgroud)

和数据库模型:

class Job(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String)

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return '<Job %s>' % self.name
Run Code Online (Sandbox Code Playgroud)

它成功显示了选择字段中的作业,但是如果您修改了表,则它不会更新,除非您完全重新启动应用程序.

python sqlalchemy flask wtforms flask-wtforms

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

Flask和WTForms:如何使用多个提交按钮制作表单?

想象一下,我需要建立一个这样的旅行计划表:

Going from [_Picadily_Circus____]
Going to [_Marylebone_____]
(Starting by) (Arriving by) [5]:[30][pm]
Run Code Online (Sandbox Code Playgroud)

两者(开始)(到达)是提交按钮.这个例子是人为的,以显示一个双按钮用例,所以我们不讨论可用性.

我如何使用Flask和WTForms做到这一点?

如何查看实际按下了哪个按钮?

python flask wtforms flask-wtforms

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

确定WTForms表单未验证的原因

我打了电话form.validate_on_submit(),但它又回来了False.如何找出表单未验证的原因?

python flask wtforms flask-wtforms

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

wtforms可用于验证GET参数吗?

我有一组我要验证的GET参数.我可以将WTFORMS用于此目的吗?我找到的所有示例都是POST请求.

flask flask-wtforms

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

flask-bootstrap quick_form缺少“提交”按钮

尝试使用flask-bootstrap quick_form。

HTML模板my-form.j2:

{% import "bootstrap/wtf.html" as wtf %}
{% extends "layout.j2" %}

{% block content %}

<h1>My form</h1>
{{ wtf.quick_form(form) }}

{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

表格类别:

class MyForm(FlaskForm):
    """A WTForm for configuring vehicle information"""
    field1 = StringField('First field', [wtforms.validators.required()])
    field2 = StringField('Second field', [wtforms.validators.required()])
    field3 = StringField('Third field', [wtforms.validators.required()])
Run Code Online (Sandbox Code Playgroud)

表单处理程序:

@app.route('/myform', methods=('GET', 'POST'))
def my_form():
    form = MyForm()
    if form.validate_on_submit():
        myData = form.data
        return redirect("/")
    return render_template("my-form.j2", form=form)
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使添加{{ form.submit }}到表中,我也看不到呈现“提交”按钮 。有任何想法吗?

flask flask-wtforms flask-bootstrap

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

Flask WTForms和WTForms-SQLAlchemy QuerySelectField为什么会产生太多无法解包的值?

我有一个非常基本的Flask应用程序:

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms_sqlalchemy.fields import QuerySelectField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
from wtforms import StringField

db = SQLAlchemy()


app = Flask(__name__)
app.config['SQLALCHEMY_URI'] = 'sqlite:///:memory:'
app.config['SECRET_KEY'] = 'fnord'
db.init_app(app)


class Section(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.Text, nullable = False)
    subject_id = db.Column(db.Integer, db.ForeignKey('subject.id'))
    subject = db.relationship('Subject', back_populates='sections')


class Subject(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.Text, nullable = False)
    sections = db.relationship('Section', back_populates='subject')


def …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask wtforms flask-wtforms

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

WTForms StringField写入Postgres时发生编程错误

我的数据库是Postgres实例。我的模型定义为:

from app import db
class Device(db.Model):
    __tablename__ = 'device'

    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String())
Run Code Online (Sandbox Code Playgroud)

我的来源定义为:

from flask_wtf import FlaskForm
from wtforms import StringField

class EditDevices(FlaskForm):
    device_name = StringField("Device Name", validators=[])
    submit = SubmitField['Submit']
Run Code Online (Sandbox Code Playgroud)

我收到以下形式的错误:

    sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'StringField' [SQL: 'UPDATE device SET name=%(name)s WHERE device.id = %(device_id)s'] [parameters: {'name':  <wtforms.fields.core.StringField object at 0x110580c18>, 'device_id': 208}]
Run Code Online (Sandbox Code Playgroud)

任何想法,我要去哪里错了?

postgresql flask wtforms flask-wtforms

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