2015-01-29 4 views
2

У меня есть форма, и на отправке я продолжаю получать ошибку ниже. Я не могу решить, в чем проблема, но я думаю, что это имеет какое-то отношение к элементу выбора, поскольку это первый раз, когда я его использую, и у меня не было проблем раньше.Сообщение WTForms с SelectField не работает

Вот моя форма:

class CampaignForm(Form): 
    name = StringField('Campaign Name', validators=[DataRequired]) 
    start = DateField('Start', validators=[DataRequired], format='%d-%m-%Y') 
    end = DateField('End', validators=[DataRequired], format='%d-%m-%Y') 
    budget = IntegerField('Budget', validators=[DataRequired]) 
    customer_id = SelectField(
     'Customer', validators=[DataRequired], coerce=int) 

Вот мой взгляд, GET работает, но я получаю сообщение об ошибке на POST:

@app.route('/campaign/add', methods=['GET', 'POST']) 
@login_required 
def campaign_add(): 
    form = CampaignForm() 

    form.customer_id.choices = [ 
     (customer.id, customer.name) 
     for customer in current_user.account.customers] 

    if form.validate_on_submit(): 
     campaign = Campaign(name=form.name.data, 
          start=form.start.data, 
          end=form.end.data, 
          budget=form.budget.data, 
          account_id=current_user.account_id, 
          customer_id=form.customer_id.data, 
          created_at=datetime.now(), 
          created_by=current_user.id, 
          updated_at=datetime.now(), 
          updated_by=current_user.id) 

     db.session.add(campaign) 
     db.session.commit() 
     return redirect(url_for('campaigns')) 

    return render_template('campaigns/add.html', form=form) 

Здесь ошибка, что я получаю, и Я не могу понять, что не так.

Traceback (most recent call last): 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/tornado/web.py", line 1309, in _execute 
    result = self.prepare() 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/tornado/web.py", line 2498, in prepare 
    self.fallback(self.request) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/livereload/server.py", line 89, in __call__ 
    WSGIContainer.environ(request), start_response) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask_debugtoolbar/__init__.py", line 124, in dispatch_request 
    return view_func(**req.view_args) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask_login.py", line 758, in decorated_view 
    return func(*args, **kwargs) 
    File "/home/lee/Code/fastplan/src/fastplan/views.py", line 249, in campaign_add 
    if form.validate_on_submit(): 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/flask_wtf/form.py", line 166, in validate_on_submit 
    return self.is_submitted() and self.validate() 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/wtforms/form.py", line 310, in validate 
    return super(Form, self).validate(extra) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/wtforms/form.py", line 152, in validate 
    if not field.validate(self, extra): 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/wtforms/fields/core.py", line 200, in validate 
    stop_validation = self._run_validation_chain(form, chain) 
    File "/home/lee/Code/fastplan/venv/lib/python3.4/site-packages/wtforms/fields/core.py", line 220, in _run_validation_chain 
    validator(form, self) 
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given 

ответ

6

Вопрос заключается в том, что линии, как это:

validators=[DataRequired] 

должно быть, как это

validators=[DataRequired()] 
Смежные вопросы