我的表单有问题,所以基本上我从数据库查询中动态加载了SelectField
,每次我对数据库进行操作时,似乎SelectField
都没有更新,跟随数据库中的实时值。
所以这是我的代码view.py
@app.route('/add/sale-transaction', methods=['GET', 'POST'])
def add_sale_transaction():
form = forms.ItemSaleForm()
if form.validate_on_submit():
# get unsold items to be added so I can mark it sold
items = models.Item.query.join(models.PurchaseTransaction) \
.filter((models.Item.sale_transaction_id == None) & (models.Item.item_type_id == form.item_stock.data)) \
.order_by(models.PurchaseTransaction.transaction_date) \
.order_by(models.Item.id) \
.limit(form.quantity.data)
# for each item add sale transaction field to mark it sold
for it in items:
it.sale_price = form.sale_price.data
it.sale_transaction_id = # something here..
db.session.add(it)
db.session.flush()
db.session.commit()
flash('Successfuly added new Sale Transaction')
return redirect(request.path)
return render_template('add-sale-transaction.html', form=form)
然后在我的form.py
class ItemSaleForm(wtforms.Form):
sale_price = IntegerField(label='Sale Price: ',
validators=[InputRequired()])
# get unsold items and its quantity
unsold_items = db.session.query(models.Item.item_type_id, models.ItemType.item_type, func.count(models.Item.id)) \
.join(models.ItemType) \
.filter(models.Item.sale_transaction_id == None) \
.group_by(models.Item.item_type_id)
# convert to dict to be used by SelectField
qty_separator = ' - qty: '
unsold_items_dict = {}
for item in unsold_items:
unsold_items_dict[item[0]] = '{}{}{}'.format(item[1], qty_separator, item[2])
item_stock = SelectField(label='Item Type: ',
coerce=int,
choices=unsold_items_dict.items(),
validators=[InputRequired()])
quantity = IntegerField(label='Item Quantity',
validators=[InputRequired()])
以下是解释,如果我在/add/sale-transaction
(item_stock
字段中访问SelectField
并填写表单,则应该向我提供未售出商品的列表< / strong> - 没有sale_transaction_id
且没有sale_price
的项目 - 并显示自己的quantity
。
因此,在我提交表单后,很明显未售出的商品列表会发生一些变化,但显然SelectField choices=
没有变化,它仍然具有与之前相同的价值。
如果我在提交表单后进行手动查询,我可以看到未售出商品中的更改,因此我怀疑db.session
到期/刷新或form
在请求'/ add / sale-transaction'或者wtform缓存某些东西时不会重新创建..
任何帮助?
答案 0 :(得分:0)
我已经解决了我的问题,事实证明,对于choices
,SelectField
属性的wtforms表现得有点奇怪。我找到了一些像this这样的解决方案,如果我在choice
或__init__()
view
,它就解决了我的问题