分配数据时 Wtforms DecimalField 上的 TypeError

TypeError on Wtforms DecimalField when assigning data

我正在尝试从数据库中填充一个表单,除 DecimalField 外,其他都运行良好。我试过从数据库中给它分配数据,试过分配整数、字符串,比如'35'和u'35',并试过int(35)和Decimal(35)。所有这些都给出 TypeError.

表格为:

class MyBaseForm(Form):
    class Meta:
        locales = ['es_ES', 'es']

class SuscriptorForm(MyBaseForm):
    idDistribuidor= SelectField('Distribuidor', validators=[validators.InputRequired()], coerce = int)
    nombreSuscriptor= StringField('Nombre', validators=[validators.InputRequired()])
    localidad = StringField('Localidad', validators=[validators.InputRequired()])
    direccionSuscriptor = StringField('Direccion')
    telefono = StringField('Telefono')
    email = StringField('Email')
    descuento = DecimalField('Descuento', validators=[validators.Optional()], places = [0,1,2])

现在开始 post 我做的方法

    form.idDistribuidor.data = suscriptor['id_distribuidor']
    form.nombreSuscriptor.data = suscriptor['nombre_suscriptor']
    form.localidad.data = suscriptor['localidad']
    form.direccionSuscriptor.data = suscriptor['direccion_suscriptor']
    form.telefono.data = suscriptor['telefono']
    form.email.data = suscriptor['email']
    form.descuento.data = suscriptor['descuento']

委托人从数据库中获取了此特定表单的数据。它有效,除了小数点。我尝试为以前的事情改变那条线,但没有运气。知道如何解决吗?无论数据来自何处,我似乎都无法在没有错误的情况下将任何内容放入 decimalField 中。 这是回溯。

    Traceback (most recent call last):
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1997, in __call__
        return self.wsgi_app(environ, start_response)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_app
        response = self.handle_exception(e)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
        response = self.full_dispatch_request()
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
        rv = self.dispatch_request()
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask_login/utils.py", line 261, in decorated_view
        return func(*args, **kwargs)
      File "/home/german/code/dbNoticias/app/bluAdmin/__init__.py", line 181, in editSuscriptor
        return render_template('addSuscriptor.html', activeMenuItem = '', edit = 'edit', form = form)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/templating.py", line 134, in render_template
        context, ctx.app)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/flask/templating.py", line 116, in _render
        rv = template.render(context)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/jinja2/environment.py", line 1008, in render
        return self.environment.handle_exception(exc_info, True)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/jinja2/environment.py", line 780, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "/home/german/code/dbNoticias/app/bluAdmin/templates/addSuscriptor.html", line 1, in top-level template code
        {% extends "baseCP.html" %}
      File "/home/german/code/dbNoticias/app/bluAdmin/templates/baseCP.html", line 93, in top-level template code
        {% block mainContent %}{% endblock %}
      File "/home/german/code/dbNoticias/app/bluAdmin/templates/addSuscriptor.html", line 34, in block "mainContent"
        {{ form.descuento(class_="form-control", placeholder="Descuento") }}
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/wtforms/fields/core.py", line 153, in __call__
        return self.meta.render_field(self, kwargs)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/wtforms/meta.py", line 56, in render_field
        return field.widget(field, **render_kw)
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/wtforms/widgets/core.py", line 163, in __call__
        kwargs['value'] = field._value()
      File "/home/german/code/dbNoticias/env3/lib/python3.5/site-packages/wtforms/fields/core.py", line 629, in _value
        exp = decimal.Decimal('.1') ** self.places
    TypeError: unsupported operand type(s) for ** or pow(): 'decimal.Decimal' and 'list'

回溯显示涉及小数位的问题:

exp = decimal.Decimal('.1') ** self.places TypeError: unsupported operand type(s) for ** or pow(): 'decimal.Decimal' and 'list'

您已经向 DecimalField

提供了 list 个地点

descuento = DecimalField('Descuento', validators=[validators.Optional()], places = [0,1,2])

但它需要 int,例如

descuento = DecimalField('Descuento', validators=[validators.Optional()], places=2)