Python Flask:从另一个函数发送表单类参数以预填充默认值
我需要用数据库(数据集)值预填充表单字段。 问题是我不知道如何将参数发送到form类 forms.pyPython Flask:从另一个函数发送表单类参数以预填充默认值,python,forms,flask,arguments,flask-wtforms,Python,Forms,Flask,Arguments,Flask Wtforms,我需要用数据库(数据集)值预填充表单字段。 问题是我不知道如何将参数发送到form类 forms.py # coding: utf-8 from db import produtosalca as produtos ##dataset imports db['table'] from flask_wtf import FlaskForm from wtforms import TextField, BooleanField, SubmitField, TextAreaField, validat
# coding: utf-8
from db import produtosalca as produtos ##dataset imports db['table']
from flask_wtf import FlaskForm
from wtforms import TextField, BooleanField, SubmitField, TextAreaField, validators, ValidationError
class ProductForm(FlaskForm,produto):
descricao = TextField("Nome", default=produto.Descricao)
classificacaoFiscal = TextField("NCM", default=produto.ClassificacaoFiscal)
mva = TextField("MVA",default=produto.MVA)
app.py
# coding: utf-8
import os
from werkzeug import secure_filename
from flask import (
Flask, request, send_from_directory, render_template, current_app, flash
)
from db import produtosalca
from forms import ContactForm, ProductForm
app = Flask("alcax")
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
app.config['MEDIA_ROOT'] = os.path.join(PROJECT_ROOT, 'media_files')
app.secret_key = 'development key'
@app.route('/productform', methods=['GET','POST'])
def productform(product):
form = ProductForm(request.form,product) ## here i was gonna send product
if request.method == 'POST':
'posted'
elif request.method == 'GET':
return render_template('productform.html', form=form.content())
我试过的每件事都会让我犯错误
'produto' is not defined
我是py的初学者。我整晚都在研究。提前感谢。请注意,
类别ProductForm(FlaskForm)
表示从FlaskForm继承的ProductForm。您的案例的简单解决方案如下:
forms.py:
from flask_wtf import FlaskForm
from wtforms import TextField
class ProductForm(FlaskForm):
descricao = TextField("Nome")
classificacaoFiscal = TextField("NCM")
mva = TextField("MVA")
from flask import Flask, render_template, redirect, request
from forms import ProductForm
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/productform', methods=['GET','POST'])
def productform():
form = ProductForm(descricao='default_descricao', classificacaoFiscal='default_classificacaoFiscal', mva='default_mva')
if form.validate_on_submit():
form = ProductForm(request.form)
# Do something with your form and redirect the user to some page.
return render_template('productform.html', form=form)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
app.py:
from flask_wtf import FlaskForm
from wtforms import TextField
class ProductForm(FlaskForm):
descricao = TextField("Nome")
classificacaoFiscal = TextField("NCM")
mva = TextField("MVA")
from flask import Flask, render_template, redirect, request
from forms import ProductForm
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/productform', methods=['GET','POST'])
def productform():
form = ProductForm(descricao='default_descricao', classificacaoFiscal='default_classificacaoFiscal', mva='default_mva')
if form.validate_on_submit():
form = ProductForm(request.form)
# Do something with your form and redirect the user to some page.
return render_template('productform.html', form=form)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
模板/\u formhelpers.html
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
<html !DOCTYPE>
<head>
<title>Flask WTF</title>
</head>
<body>
{% from "_formhelpers.html" import render_field %}
<form method="POST" action="/submit">
<dl>
{{ form.hidden_tag() }}
{{ render_field(form.descricao, size=20) }}
{{ render_field(form.classificacaoFiscal, size=20) }}
{{ render_field(form.mva, size=20) }}
</dl>
<input type="submit" value="Go">
</form>
</body>
</html>
app.py:
from flask_wtf import FlaskForm
from wtforms import TextField
class ProductForm(FlaskForm):
descricao = TextField("Nome")
classificacaoFiscal = TextField("NCM")
mva = TextField("MVA")
from flask import Flask, render_template, redirect, request
from forms import ProductForm
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/productform', methods=['GET','POST'])
def productform():
form = ProductForm(descricao='default_descricao', classificacaoFiscal='default_classificacaoFiscal', mva='default_mva')
if form.validate_on_submit():
form = ProductForm(request.form)
# Do something with your form and redirect the user to some page.
return render_template('productform.html', form=form)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
您将产品导入为
produto
,但将其作为produto
使用时不带S。将输入的produto
重命名为produto
hey@odialghamdi-thx。我忘了删除这部分。即使我使用相同的名称,它也不起作用,因为它说AttributeError:“Table”对象没有属性“DescriptaO”。produtosalca是一个db表。您的类表
没有将描述
作为classhey@ettanany的属性。谢谢您的帮助!我试图理解在这种情况下,它使用默认值预填充字段。我想我应该为produto.descripao更改'default\u descripao'
,对吗?@ettanany抱歉,为produto['descripao']更改'default\u descripao'很有效,非常感谢!!!!现在,我有23个字段,我需要一个接一个地显式显示它们,或者有更实际的方法?@ChrisHawk是的,您需要将此字段的产品密钥更改为“default_descripcao”,并将其更改为产品对象中的其他字段。这只是一个例子。你的数据库文件中有产品模型吗?嘿@ettanany非常感谢你,伙计。新的编辑有点超出了我初学者的理解范围,但我将对此进行研究。再次感谢你的帮助!我希望我能投这一票。奇怪的是,人们投了反对票,却无法提出“更好”的解决方案。