2013-01-06 2 views
2

나는 이런 SelectField을하지. 선택을 선택하고 제출을 누르면 "이것은 유효한 선택이 아닙니다"라고 표시되며 선택 필드가 비어 있습니다.플라스크 - 태권도 연맹의 selectField 선택은 유효

페이지를 새로 고침하면 마치 코드가 손상되어 더 이상 선택 사항이 표시되지 않는 것처럼 보입니다. 빈 드롭 다운/선택 필드입니다.

내가 뭘 잘못하고 있니?

편집 : 어떤 이유로 iteritem을 양식 대신보기에 넣으면 모든 것이 작동합니다. Flask-WTF의 몇 가지 종류의 변종. 형식을 사용하지 않으면 양식을 제출 한 후 선택 사항을 삭제하는 것처럼 보입니다.

답변

9

아마도 문제는 dict의 키가 문자열이라는 것입니다. 나는 그래서 아마 이런 식으로 뭔가 도움이 될 전에이 문제를 가지고 :

typeone = SelectField("Question1", coerce=str, choices=QUESTION_LIST['QuestionOne']) 

coerce 거시기를 도왔다. 모든 POST 데이터가 유니 코드이고 기본적으로 coerce이 유니 코드와 같다고 생각됩니다 (적어도 WTF 형식에서는 Flask-WTF 확장을 사용하려면이를 확인해야합니다). 그리고 선택 키는 문자열입니다.

+1

'pre_validate'에'print ("pre choices", self.choices, self.data)를 추가 할 때. 내 상황에있어 : ​​'(u'pre choice', [(1, 'Question'), (2, 'Artical'), (3, 'movie')], 'u'2'). 실패했을 때 나는 생각한다. 항상 그 이유가있다. – jiamo

0

dict 대신 집합을 전달합니다. QUESTION_LIST 정의의 쉼표를 콜론으로 바꿉니다. 대신 양식의보기에서 iteritems을 넣을 때 실제로 .iteritems()에 대한 호출이 이미 ... 어떤 이유

QUESTION_LIST['QuestionOne'] = { 'disagree-strong': "Strongly Disagree", 
           'agree-strong': "Strongly Agree" } 
+1

죄송 합니다만, 의사 코드를 잘못 작성했습니다. 나는 그것을 실제 코드에서 정확하게 작성했다. 그래서 그것은 정확합니다. - 여전히 작동하지 않습니다. 내 오류가 다르므로 iteritems가 실패하지 않는 이유입니다. – Dexter

0

를 실패, 모든 작동합니다. Flask-WTF의 몇 가지 종류의 변종. 형식을 사용하지 않으면 양식을 제출 한 후 선택 사항을 삭제하는 것처럼 보입니다.

그래서 .iteritems() 코드를 VIEW로 이동하려면 form.question_field.choices = QUESTION_LIST [ 'QuestionOne']. iteritems();를 입력하면됩니다. 양식 파일에서 iteriterm을 사용하는 것보다 효과적입니다.