У меня проблемы с установкой значения по умолчанию в WTForms SelectField на основе значения конфигурации в моем приложении Flask.
У меня есть файл forms.py
, который включает, в частности:
class MySearchForm(FlaskForm):
title = StringField('Title')
page_size = SelectField('Entries/page', choices=[(10, "10"), (25, "25"), (50, "50"), (100, "100")], default=25)
# other stuff
Хотя это может показаться подходящим местом, я не могу сделать значение по умолчанию переменной, передав конфигурацию приложения в этот файл, потому что я получаю ошибку «Работа вне контекста приложения».Так что я решил, что мне нужно сделать это с динамическим значением по умолчанию во время выполнения в моем представлении Flask.
Я рассмотрел ряд других вопросов StackOverflow по этому поводу, основным из которых, кажется, является КакВы устанавливаете значение по умолчанию для WTForms SelectField? , но я не могу заставить работать какой-либо из них.
Мой routes.py
для вида поиска более или менее похож на это:
form = MySearchForm(request.args)
if request.args: # if not, I display the search form
if form.title.data:
# construct relevant part of database query
page_size = int(form.page_size.data)
# other stuff: construct and execute DB query; render the view_results page
Если перед оператором if request.args
я попробую form.page_size.default = current_app.config['PAGE_SIZE']
, а затем form.process()
, как предложено, это уничтожит все остальное в форме поиска, поэтому title
не будет выполнено.Если я попытаюсь form.page_size.data = current_app.config['PAGE_SIZE']
, он не установит значение конфигурации по умолчанию в форме, только в результате.
Я также попробовал метод, рассмотренный в Установка значения по умолчанию после инициализации в вопросе SelectField flask-WTForms , изменив мой form
вызов на form = MySearchForm(request.args, page_size=current_app.config['PAGE_SIZE'])
.Это также не работает должным образом: при первоначальном вызове в форме ничего не выбрано (и в этом конкретном случае, таким образом, отображается значение «10»);настроенное значение правильно используется для самого поиска, но значение формы page_size
остается на уровне "10".Кроме того, фактически выбор значения в форме не имеет никакого эффекта;настроенное значение используется независимо от того, что пользователь выбирает в форме.(Точно так же ручное изменение page_size
в URL ведет себя так же.)
Как мне это сделать?