我在这里有两种形式。一个用于组,另一个用于产品。用户创建新的产品组时,它将存储在数据库记录中。当用户在产品中添加新项目时,表单的选择之一是从“组”中选择一个选项以对项目进行分类。函数getGroups调用数据库记录,并作为ProductForm.py中的选项,它显示所有可用的组,以便对正在创建的新项目进行分类。到目前为止,这工作正常,但是每当用户创建新组并尝试添加新产品时,我都必须重新加载服务器才能显示新组选项。
我的猜测是因为路由是预先加载ProductForm的,因此,不会调用getGroups()来显示已添加的新记录。当用户创建一个新组并且SelectField正确显示已添加到该组的新项目时,如何在不必重新加载服务器的情况下实现该目标?
Routes.py
''' Routes - Product add '''
@app.route('/products/add', methods=['GET','POST'])
@login_required
def addItem():
form = ProductForm()
if form.validate_on_submit():
new_item = {
'id' : str(uid()),
'category' : form.category.data,
}
db.Products.insert_one(new_item)
flash('New Item Added.')
return redirect(url_for('products'))
return render_template('add-item.html', title='Add Item', form=form)
''' Routes - Groups '''
@app.route('/groups/add', methods=['GET','POST'])
@login_required
def groups_add():
form = GroupForm()
if form.validate_on_submit():
new_item = {
'id' : str(uid()),
'name' : form.name.data,
}
db.Groups.insert_one(new_item)
flash('New Group Added.')
return redirect(url_for('groups'))
return render_template('groups-add.html', title='Groups', form=form)
Forms.py
def getGroups():
groups = db.Groups.find()
size = groups.count() - 1
choices = []
while size >= 0:
choices.append((groups[size]['id'], groups[size]['name']))
size -= 1
if len(choices) == 0:
return [('none', 'None')]
return choices
class ProductForm(FlaskForm):
''' Product Items '''
category = SelectField('Category', choices=getGroups())