Как реализовать поле Dynami c Select2 в моем flask веб-приложении? - PullRequest
0 голосов
/ 02 марта 2020

HTML

<select id='selUser' style='width: 200px;'>
  <option value='0'>- Search user -</option>
</select><br><br>

<script>
    $(document).ready(function() {
        $("#selUser").select2({
            ajax: { 
                url: "{{ url_for('main.add_user') }}",
                type: "POST",
                dataType: 'json',
                delay: 250,
                data: function (params) {
                    return {
                        searchTerm: params.term // search term
                    };
                },
                processResults: function (response) {
                    return {
                        results: response
                    };
                },
                cache: true
           }
       });
   });
</script>

Python маршрут:

@main.route('/add_user', methods=['GET', 'POST'])
@login_required
def add_user():     
    form = AddUserForm()
    a = Group.query.with_entities(Group.name)
    groups = []
    for b in a:
        groups.append(b[0])
    data = {
        'groupNames': groups
    }
    groups = json.dumps(groups)

    if form.validate_on_submit():
        User.create_user(
            user=form.name.data,
            email=form.email.data,
            password=form.password.data,
            groups=form.group.data)
        flash(' User Registration Successful')
    return render_template('add_user.html', form=form,data=data)

Что делать на моем маршруте? Группа - это моя модель. Из маршрута у меня есть список названий групп, которые мне нужно отправить в поле выбора 2, но я не знал, как его реализовать. Пожалуйста, уточните !! Как отправить имена групп на ajax и отобразить их в окне выбора

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете использовать SelectField из wtform.

В следующем примере я определяю класс AddUserForm, который наследуется от FlaskForm, с полем (groups) типа selectfield.

Затем на маршруте add_user Я заполняю групповое поле названиями групп, полученных по запросу базы данных.

# your other imports here
from flask_wtf import FlaskForm
from wtforms import SelectField

class AddUserForm(FlaskForm):
    # your other fields here
    groups = SelectField('Groups')


@main.route('/add_user', methods=['GET', 'POST'])
@login_required
def add_user():     
    form = AddUserForm()
    a = Group.query.with_entities(Group.name)
    form.groups.choice = [(i[0], i[0]) for i in a]

    if form.validate_on_submit():
        User.create_user(
            user=form.name.data,
            email=form.email.data,
            password=form.password.data,
            groups=form.groups.data)
        flash(' User Registration Successful')
    return render_template('add_user.html', form=form, data=data)
...