Python Flask:从另一个函数发送表单类参数以预填充默认值

Python 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

我需要用数据库(数据集)值预填充表单字段。 问题是我不知道如何将参数发送到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, 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非常感谢你,伙计。新的编辑有点超出了我初学者的理解范围,但我将对此进行研究。再次感谢你的帮助!我希望我能投这一票。奇怪的是,人们投了反对票,却无法提出“更好”的解决方案。