2016-12-09 6 views
2

Я ищу чистый способ сохранения значений WTFForm QuerySelectField, когда выбран данный параметр выпадающего списка. Идея состоит в том, чтобы отфильтровать список проектов в соответствии с данной технологией, выбранной из раскрывающегося списка QuerySelectField. Подход, который я принял, - отправить запрос на получение/проекты, содержащие строку запроса, с идентификатором технологии, используя событие on change при выпадающем i.e./projects? Id = 5. Я его структурирована следующим образом:Persist WTForm QuerySelectField значение после запроса на получение

Проект

форм-
class ProjectForm(ProjectFormBase): 
    title = StringField('Title', [validators.Length(min=4, max=25), validators.DataRequired()]) 
    technology = QuerySelectField('Technology', query_factory= connect.technology_choices, 
        get_pk=lambda a: a.id, 
        get_label=lambda a: a.name, allow_blank=True, blank_text=u'Select a technology...') 

Проект маршрутные

@app.route('/projects', methods=['GET', 'POST']) 
def projects(): 
    list_of_projects = None 
    form = ProjectForm(request.form) 
    technology_id = request.args.get('id') 
    if technology_id: 
     list_of_projects = connect.project(technology_id) 
    if request.method == 'GET': 
     if list_of_projects: 
      connect.close_connection() 
      return render_template("projects.html", 
            list_of_projects = list_of_projects, form = form) 
     else: 
      return render_template("projects.html", form=form) 

JS -

$('#technology').on('change', function() { 
     var technology = $("#technology").value; 
     window.location.href="/projects?id=" + technology_id; 
     window.history.pushState('obj', 'newtitle', '/projects'); 
    }); 

Просто подвести итоги, я поиск выбранного значения выпадающего меню для сохранения после события on change. Я также открыт для совершенно другого подхода, а не для передачи значений строки запроса.

ответ

0

Если я правильно понял, все, что вам нужно сейчас, это указать поле выбора технологии, которое будет задано при запросе страницы с помощью набора GET arg id. Что-то вроде этого должно работать:

@app.route('/projects', methods=['GET', 'POST']) 
def projects(): 
    form = ProjectForm(request.form) 

    if request.method == 'GET': 
     technology_id = request.args.get('id') 
     # Set selected option on select field. 
     form.technology.data = technology_id 
     try: 
      list_of_projects = connect.project(technology_id) 
      connect.close_connection() 
     except: 
      list_of_projects = [] 

     return render_template("projects.html", 
           list_of_projects=list_of_projects, form=form) 

Я также предлагаю удалить некоторый код, чтобы он соответствовал принципам проектирования EAFP Python.

 Смежные вопросы

  • Нет связанных вопросов^_^