Flask-路线和表单如何根据请求重新加载

时间:2019-01-12 23:41:30

标签: python flask

我在这里有两种形式。一个用于组,另一个用于产品。用户创建新的产品组时,它将存储在数据库记录中。当用户在产品中添加新项目时,表单的选择之一是从“组”中选择一个选项以对项目进行分类。函数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())

0 个答案:

没有答案