首页 > 解决方案 > Flask 下拉菜单未在发布请求中发送值

问题描述

我有一个带有文本输入和选择下拉列表的表单。下拉列表已填充,但其所选值未在 POST 请求中出现。

edit_user_details.html:

<form class="col-auto" action="{{ url_for('admin_bp.edit_user', user_id=user.id) }}" method="POST">
    <div class="form-group">
        <label for="user-name">Name</label>
        <input type="text" id="user-name" class="custom-form-input form-control" placeholder="John Doe" required name="name" value="{{ user.user_name }}">
    </div>
    <div class="form-group">
        <label for="user-role">Role</label>
        <select id="user-role" name="role" class="custom-select custom-dropdown custom-form-input">
            {% for role in roles %}
                {% if role == user.role %}
                    <option value="{{ role.id }}" selected>{{ role }}</option>
                {% else %}
                    <option value="{{ role.id }}">{{ role }}</option>
                {% endif %}
            {% endfor %}
        </select>
    </div>
    <a href="#">
        <button type="submit" id="btn-submit-login" class="mr-2 mt-5 z-100 custom-btn custom-btn-primary btn btn-primary">Save changes</button>
    </a>
    <a href="{{ url_for('admin_bp.users') }}">
        <button type="button" class="ml-2 mt-5 z-100 custom-btn custom-btn-secondary btn btn-primary">Discard changes</button>
    </a>
</form>

路线.py:

@admin_bp.route('/users/<int:user_id>/edit_details/', methods=['GET', 'POST'])
@login_required
def edit_user(user_id):

    user = get_user_by_id(user_id)

    if request.method == 'POST':

        name = request.form.get('name')
        role = request.form.get('role')
        
        name = name if not name == user.user_name else None
        role = role if not role == user.role else None

        update_user(by_email=user.user_email, name=name, role=role)

        flash(f'Changes to {user.user_name} have been saved')
        return redirect(url_for('.users'))

    roles = get_roles()
    role_names = [r.role_name for r in roles]

    return render_template('edit_user_details.html', user=user, roles=role_names)

name输入在提交时通过,但为role空引号,即使在“网络”选项卡中也是如此。

我看过很多类似的问题,但我仍然不确定我做错了什么。

标签: htmlflaskpostrequestdropdown

解决方案


推荐阅读