Flask - Routes & Forms, как перезагрузить по запросу - PullRequest
0 голосов
/ 13 января 2019

У меня есть две формы здесь. Один для групп, а другой для продуктов. Когда пользователь создает новую группу для продуктов, она сохраняется в записи базы данных. Когда пользователи добавляют новый элемент в «Продукты», одним из вариантов выбора формы является выбор параметра из групп для категоризации элемента. Функция 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...