这是我的模板代码:
if request.method == 'POST':
#------Invoice
#-----Invoice details
form = InvoiceReportEntries(request.form)
# items = []
for item in form.items:
lineitem = InvoiceLineItem(description=item.description,
amount=item.amount,
invoice_id=invoice.id)
db.session.add(lineitem)
db.session.commit()
我的模板是:
<form method="POST">
{{ form.hidden_tag() }}
<table>
<tr class="heading">
<td>
Item
</td>
<td>
Price
</td>
</tr>
<tr class="item">
<div>
<td>
<input id={{ items|length }} name="description-{{ items|length }}" required="" type="text" value="">
</td>
<td>
<input id={{ items|length }} name="amount-{{ items|length }}" required="" type="text" value="">
</td>
</div>
</tr>
似乎我的提交表单无法正常运行,因为出现此错误:
sqlalchemy.exc.StatementError:(builtins.TypeError)float()参数 必须是字符串或数字,而不是'DecimalField'[SQL:INSERT INTO invoice_line_item(说明,金额,invoice_id)VALUES(?,?,?) [参数:[{'description':'','invoice_id':14,'amount':
}]]
和项目的数据形式为: {'items':[{'description':'','amount':None,'id':'','csrf_token':''}],'csrf_token':'xxxx'} 但是我在模板中填充了值吗? 描述为“测试”,金额为23
此表中我将有更多的Thant行,因此我应该确定每行并将其保存在数据库中
感谢帮助
更新: 我的模特:
class InvoiceLineItem(db.Model):
id = db.Column(db.Integer, primary_key=True)
description = db.Column(db.String, nullable=False)
amount = db.Column(db.Float, nullable=False)
invoice_id = db.Column(db.Integer, db.ForeignKey('invoice.id'), nullable=False)
def __init__(self, description, amount, invoice_id):
self.description = description
self.amount = amount
self.invoice_id = invoice_id
我的表格.py:
class InvoiceitemForm(Form):
description = StringField('Description', validators=[DataRequired()])
amount = DecimalField('Amount', validators=[DataRequired()])
id = HiddenField('id')
class InvoiceReportEntries(Form):
items = FieldList(FormField(InvoiceitemForm), min_entries=1)
答案 0 :(得分:1)
我只提供快速建议,因此您还应该添加wtformsforms.py和“ Models.py”。
Hanving说您收到的错误非常明显:
sqlalchemy.exc.StatementError: (builtins.TypeError) float() argument must be a string or a number, not 'DecimalField'
指的是什么?
就像我说的那样,我可以完全确定为什么,因为缺少一些代码快照,但是错误代码本身就是这样:
amount': <wtforms.fields.core.DecimalField object at 0x10bc52510>
这是因为您正在调用Class而不是类的实例。实际上,我想您在form.py中有“ DecimalField”,以获取更多信息--_> Here。
然后我可以看到HTML,这里没有WTFORMS jinja标签,但是有一个标准的HTML Tag输入,
<input id={{ items|length }} name="amount-{{ items|length }}" required="" type="text" value="">
所以我建议删除它并添加以下内容:
{{ form.amount.label }}
{{ form.amount(class='yourclass') }}
添加forms.py:而不是required =“”:
InputRequired()或DataRequired()