【发布时间】:2016-02-15 12:22:24
【问题描述】:
我的表单有问题,所以基本上我有一个从数据库查询动态加载的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) 它应该给我未售出物品的列表 - 物品没有sale_transaction_id 也没有sale_price - 并显示自己的quantity。
所以在我提交表单后,未售出的物品列表显然发生了一些变化,但SelectField choices=显然没有改变,它仍然具有与以前相同的值。
如果我在提交表单后进行手动查询,我可以看到 未售出的商品 的变化,因此我怀疑 db.session 到期/刷新或 form 在此期间未重新创建请求 '/add/sale-transaction' 或者 wtform 缓存一些东西..
有什么帮助吗?
【问题讨论】:
标签: python flask wtforms flask-wtforms