2017-01-12 4 views

답변

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에서 값을 가져 오는 예약 된 작업 (예 : Celery)이 있습니다. 한 번 60분과,

  • 당신의 뷰 코드는 언제든지 비싼 API 호출을 수행하지 않는 데이터베이스

    에 저장하지만, 항상 데이터베이스에 직접

Deform example

+0

안녕 미코의 값을 채 웁니다 이것이 내가 끝내는 것입니다. 참고로, 데이터는 다른 API의 초기 값 이었지만 그 주위에 방법을 발견했습니다. 감사. – silviud