2017-02-20 16 views
-1

Создание простой базы данных Student CRUD Я не могу получить функцию «Добавление ученика» для работы. В настоящее время он производит - «TypeError: объект« NoneType »не является итерируемым».Flask importing SelectField из внешнего файла

** EDIT: Я понял, что это вызвано использованием внешней таблицы поиска для «SelectField». Лучший ответ, который объясняет, как решить эту проблему, правильно выбирая данные «ключ, значение» выбора во внешнем модуле, будет отмечен как ответ. Спасибо за помощь. **

Моя форма ...

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

Мой поиск файла 'lookup.py' ...

РОД = [('мужчина', 'мужчина'), (» Женский», 'Женский')]

Вот Traceback ...

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

При импорте значений в SelectField с использованием 'choice =' значений, которые должны быть получены генератором.

Например, в моей форме, я имел бы ...

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

Большое спасибо @davidism, комментарии которого заставили меня взглянуть на «выбор». – Inyoka

-1

В вашем коде зрения, вы создаете форму с form = AddStudent(). Это дает вам пустую форму студента. Чтобы заполнить данные в форме данными из запроса, используйте form = AddStudent(request.form). Это заполнит form с данными вашего запроса.

+0

Они используют Flask-WTF, поэтому это неверно. – davidism

+0

Из [link} http://flask.pocoo.org/docs/0.12/patterns/wtforms/ 'Документация Flask-WTF':' form = RegistrationForm (request.form) ' –

+1

Эти документы предназначены для WTForms, а не для фляжей -WTF, на самом деле они упоминают использование Flask-WTF вместо этого наверху. Ознакомьтесь с документами Flask-WTF: http://flask-wtf.readthedocs.io/en/stable/quickstart.html#validating-forms. – davidism

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

  • Нет связанных вопросов^_^