2017-01-12 5 views
1

Я ищу, чтобы иметь форму, которая имеет мультиселекцию типа поля, используя деформирование (как в этом примере http://deformdemo.repoze.org/select2_with_multiple/), но с выбором, исходящим из удаленного источника данных (вызов json).Deform2 multiselect с удаленным источником данных

Что будет лучший способ осуществить это - возможно с deform2 или я должен просто падать обратно на JQuery и т.д.

спасибо!

ответ

1

Это, безусловно, легче заполнить значение выбора на стороне сервера Вы можете сделать это, используя дуршлаг отложенного установить 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

+0

Привет Микко, это то, что я в конечном итоге делаю, FYI, данные были получены из другого api, но нашли способ обойти его. Благодарю. – silviud

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