2017-02-20 2 views
-1

간단한 학생 CRUD 데이터베이스 만들기 '학생 추가'기능을 사용할 수 없습니다. 현재 그것은 - "TypeError : 'NoneType'객체가 반복 가능하지 않습니다."플라스크 외부 파일에서 SelectField 선택 가져 오기

** 편집 :이 문제는 'SelectField' 'choices'에 외부 조회 테이블을 사용했기 때문에 발생했습니다. '키, 값'데이터를 외부 모듈로 올바르게 분리하여이를 해결하는 방법을 설명하는 가장 좋은 대답은 대답으로 표시됩니다. 도와 줘서 고마워. **

내 양식 ...

class AddStudent(FlaskForm): 
    gender = SelectField('Gender :', choices=lookup.GENDER) 

내 탐색 파일 'lookup.py'...

GENDER = ('말레'말레) (' 여성 ','여성 ') 여기서

인 역 추적 ...

builtins.TypeError 
TypeError: 'NoneType' object is not iterable 
File "/Users/inyoka/Documents/dev/study/app/stud/views.py", line 16, in add 
if form.validate_on_submit(): 
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/flask_wtf/form.py", line 101, in validate_on_submit 
return self.is_submitted() and self.validate() 
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/form.py", line 310, in validate 
return super(Form, self).validate(extra) 
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/form.py", line 152, in validate 
if not field.validate(self, extra): 
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/fields/core.py", line 193, in validate 
self.pre_validate(form) 
File "/Users/inyoka/Documents/dev/study/env/lib/python3.5/site-packages/wtforms/fields/core.py", line 468, in pre_validate 
for v, _ in self.choices: 
TypeError: 'NoneType' object is not iterable 
+0

전체 스택 추적에 오류 messasage을 게시하시기 바랍니다. – Selcuk

+0

추적 표시를 추가 했으므로 전체 스택 추적을 얻는 방법을 모르지만 그 중 일부는 작업 중입니다. – Inyoka

+0

이것을 [mcve]로 줄이십시오. – davidism

답변

0

'choices ='를 사용하여 SelectField로 값을 가져올 때 생성기에서 생성해야하는 값. 내가 가진 것이 내 양식의 예를 들어

...

from .lookup import * 

goal = SelectField('Professional Goal :', choices=Lookup(GOALS)) 

가 lookup.py에서 다음을 찾을 필요가 ... 당신은 많은 경우

class Lookup: 
    def __init__(self, items): 
     self.items = items 
    def __iter__(self): 
     for item in self.items: 
      yield(item) 

# List of choices to yield 
GOALS = [('none', 'None'), 
      ('TOEFL', 'TOEFL'), 
      ('IELTS','IELTS'), 
      ('iGCSE','iGCSE')] 

이 가치가있다 검색 할 선택 항목. 나는이 도입을 발견 발전기에 대한 자세한 내용은

...

http://www.python-course.eu/generators.php

+0

빅이 나를 '선택'을 보도록 이끌어 준 @ 데이비드주의에게 감사드립니다. – Inyoka

-1

보기 코드에서 form = AddStudent()으로 양식을 만듭니다. 그것은 당신에게 빈 학생 양식을 제공합니다. 요청의 데이터로 양식의 데이터를 채우려면 form = AddStudent(request.form)을 사용하십시오. 그러면 form에 요청한 데이터가 채워집니다.

+0

그들은 Flask-WTF를 사용하고 있기 때문에 이것이 잘못되었습니다. – davidism

+0

[링크} http://flask.pocoo.org/docs/0.12/patterns/wtforms/ 'Flask-WTF documentation'에서 : form = RegistrationForm (request.form) –

+1

이러한 문서는 Flask가 아닌 WTForms 용입니다. -WTF, 사실 그들은 대신에 Flask-WTF를 사용한다고 언급합니다. Flask-WTF 문서 (http://flask-wtf.readthedocs.io/en/stable/quickstart.html#validating-forms)를 확인하십시오. – davidism

관련 문제