2012-08-23 3 views
25

WTForms를 사용하여 SelectField의 기본값을 설정하려고하면 'default'매개 변수에 값을 전달합니다.WTForms SelectField에 대한 기본값을 어떻게 설정합니까?

class TestForm(Form): 
    test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=2) 

나는 또한 다음을 시도했다.

class TestForm(Form): 
    test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=(2, "Def")) 

기본 선택 필드를 "Def"로 설정하지 마십시오. 이것은 TextField와 같은 다른 종류의 필드에서도 작동합니다. 어떻게 SelectField의 기본값을 설정합니까? '

답변

20

게시 한 첫 번째 방법은 정확하며 나에게 적합합니다. 당신이 WTForms의 이전 버전을 실행하고 있다고 할 수 있습니다 작동하지 않습니다에 대한 유일한 설명은 내가이 문제가 무엇인가와 default을 무시 Fielddata 특성에 의한 것으로 판단

+1

당신이 올바른지 :

여기에 그것을 할 수있는 새로운 방법입니다. 이전 버전을 실행하고있었습니다. – jan

21

1.0.1에 나를 위해 일한 그 WTForms는 이해하지 못합니다 (예 : DB 모델 객체 - int이 필요합니다). 당신과 같이 생성자에서 양식을 채운 경우에 발생할 것이다 : 몇 가지 방법이 있습니다

form = PostForm(obj=post) 
form.category.data = (post.category.id 
         if page.category 
         else 0) # I make 0 my default 
+1

런타임에보기에서 선택 항목을 동적으로 채울 때, 이것이 한 가지 선택 사항을 기본적으로 선택하도록하는 올바른 방법입니다. Google은이 질문에 많은 사람들을 데려 오기 때문에 이것이 아마도 받아 들여진 대답 일 것입니다. –

+0

답변을 주셔서 감사합니다.이것은 선택된 대답이어야합니다. – JMS

+1

글쎄, 나는보기의 목록에서 다른 옵션으로 기본 옵션을 변경하고 양식을 제출할 때 새로운 옵션 대신 기본 옵션이 제출된다는 것을 알게되었습니다. 이 문제를 어떻게 해결할 수 있습니까? – nikitz

11

:이 솔루션은 양식을 채워 한 후 수동으로 data 속성을 설정하는 것입니다

form = PostForm(obj=post) 

이것을하기 위해. 첫 번째 코드 스 니펫이 실제로 맞습니다. 동적 비록보기에이 작업을 수행하려면

, 당신도 할 수 있습니다 : 당신이 int를 사용할 때이 SelectFieldchoices 설정입니다

form = TestForm() 
form.test_field.default = some_default_id 
form.process() 
3

, 그것은 다음과 같이 작동

test_select = SelectField("Test", coerce=int, choices=[(0, "test0"), (1, "test1")], default=1) 

나 :

class TestForm(Form): 
    test_select = SelectField("Test", coerce=int) 

@app.route("/test") 
def view_function(): 
    form = TestForm() 
    form.test_select.choices = [(0, "test0"), (1, "test1")] 
    form.test_select.default = 1 
    form.process() 
+1

두 번째 변형을 테스트 해 보셨습니까? 'form.test_select.default = 1'을 호출해도 시스템에서 아무 것도 바뀌지 않습니다. – Robert

+0

마지막으로, 뭔가 작동합니다! –

4

Flask-WTF 0.14.2 명의 사용자가 여기 있습니다. 이 대답은 나와 비슷한 문제가있는 사람을위한 것입니다.

기본적으로 이전 솔루션 중 어느 것도 form.validate_on_submit()과 제대로 작동하지 않습니다.

페이지가로드 될 때 참으로 기본값을 변경합니다 form.test_field.data을 설정하지만, 데이터가 같은validate_on_submit 후 유지 (브라우저에서 사용자가 변경하는 것은 효과가 없습니다).

설정이 form.test_field.default이면 form.process()을 호출하면 페이지가로드 될 때 값이 변경되지만 validate_on_submit은 실패합니다.

class TestForm(Form): 
    test_field = SelectField("Test", choices=[(0, "test0"), (1, "test1")]) 

@app.route("/test") 
def view_function(): 
    form = TestForm(test_field=1) 
    if form.validate_on_submit(): 
    ... 
관련 문제