Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从模型生成的表单中指定所需的小部件(例如,文本区域而不是简单的文本输入)?烧瓶炼金术_Python_Flask_Flask Sqlalchemy_Wtforms_Flask Wtforms - Fatal编程技术网

Python 如何从模型生成的表单中指定所需的小部件(例如,文本区域而不是简单的文本输入)?烧瓶炼金术

Python 如何从模型生成的表单中指定所需的小部件(例如,文本区域而不是简单的文本输入)?烧瓶炼金术,python,flask,flask-sqlalchemy,wtforms,flask-wtforms,Python,Flask,Flask Sqlalchemy,Wtforms,Flask Wtforms,我已经使用中的片段从Flask中的模型创建了WTForms表单。除了只创建输入字段之外,其他一切都可以正常工作。我希望描述(见下面的models.py)是一个文本区域。有什么想法吗 从models.py: title = db.Column(db.String(55)) description = db.Column(db.Text) 从views.py MyForm = model_form(MyModel, base_class=Form) form = MyForm() return r

我已经使用中的片段从Flask中的模型创建了WTForms表单。除了只创建输入字段之外,其他一切都可以正常工作。我希望描述(见下面的models.py)是一个文本区域。有什么想法吗

从models.py:

title = db.Column(db.String(55))
description = db.Column(db.Text)
从views.py

MyForm = model_form(MyModel, base_class=Form)
form = MyForm()
return render_template('create.html', form=form)
从create.html

{% for field in form %}
    {{field.label}}
    {{field}}
{% endfor %}
输出:

<input id="title" name="title" type="text" value="">
<input id="description" name="description" type="text" value="">

我想要的是:

<input id="title" name="title" type="text" value="">
<textarea id="description" name="description"></textarea>

您可以创建如下自定义表单:

forms.py

from flask.ext.wtf import Form
from wtforms.fields import TextField, TextAreaField, SubmitField
import wtforms

class ItemForm(Form):
    title = Textfield('Title')
    description = TextAreaField('Description')
    submit = SubmitField('Submit')
routes.py

from forms import ItemForm
@app.route('/form')
def form()
    form = ItemForm()
    return render_template('form.html', form=form)
form.html

{% for field in form %}
    {{field.label}}
    {{field}}
{% endfor %}

本教程提供了更多信息:

您可以使用
模型表单
字段参数
覆盖特定字段的设置。您可以设置从标签到验证器的所有内容。它接受
字段的任何有效参数。\uuuu init\uuuu()
,包括小部件

MyForm = model_form(MyModel, base_class=Form, field_args={
    'description': {'widget': TextArea()},
})

如果您想了解还可以覆盖哪些内容,请查看。

您使用的WTForms扩展名是什么?from flask.ext.wtf import Form from WTForms.ext.sqlalchemy.orm import model\u Form
WTForms.ext.sqlalchemy
在版本2中被弃用,取而代之的是
WTForms\u alchemy
。你可能想看看这个。另一个选项是使用
field_args
参数将
description
小部件设置为
model_form
。我一直在寻找一些类似的解决方案,但我不知道这是否是我想要的。我认为,如果我可以直接从模型生成表单,并将约束跳过到单独的表单类,那将是一件好事。这将是一件好事,但有时为了获得您想要的确切结果,您可能需要从自动生成的结果中退出。