Это, безусловно, легче заполнить значение выбора на стороне сервера Вы можете сделать это, используя дуршлаг отложенного установить values
для поля выбора:
@colander.deferred
def deferred_choices_widget(node, kw):
choices = kw.get('choices')
return deform.widget.SelectWidget(values=choices)
@colander.deferred
def deferred_default(node, kw):
return kw['default']
class Schema(colander.Schema):
pepper = colander.SchemaNode(
colander.String(),
default=deferred_default,
widget=deferred_choices_widget,
)
def view(request):
# choices = (
# ('', '- Select -'),
# ('habanero', 'Habanero'),
# ('jalapeno', 'Jalapeno'),
# ('chipotle', 'Chipotle')
# )
choices = load_data_from_some_api()
schema = Schema().bind(choices=choices, default='jalapeno')
form = deform.Form(schema, buttons=('submit',))
return self.render_form(form)
Однако, чтобы сделать это быстро, вы, вероятно, захотите иметь какой-то кеш. Обычно хороший рисунок
Запланированное задание (Сельдерей) для получения значений из API, например. один раз в 60 минут, и хранить их в базе данных
Ваше мнение код не выполняет никаких временных вызовов API дорого, но всегда заполнятся значения непосредственно из базы данных
Deform example
Привет Микко, это то, что я в конечном итоге делаю, FYI, данные были получены из другого api, но нашли способ обойти его. Благодарю. – silviud