微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Flaks wtform DecimalField上设置use_locale?

如何解决如何在Flaks wtform DecimalField上设置use_locale?

我一直在尝试为wtform DecimalField设置'use_locale'参数,但是似乎没有任何效果,并且几乎没有关于如何设置'use_locale'的示例。我遍历了Babel和WTForm DecimalField的文档,到目前为止我一无所获。

以下是相关代码片段:

初始化 .py:

from flask import Flask,request
from config import Config
from flask_babel import Babel,Locale

app = Flask(__name__)
app.config.from_object(Config)

babel = Babel(app)
locale = Locale('pt','BR')

forms.py:

from flask_wtf import FlaskForm
from app import app,db,locale
from wtforms import StringField,BooleanField,SubmitField,TextAreaField,IntegerField,SelectField,DecimalField
from wtforms.validators import ValidationError,Datarequired,EqualTo,Length

class Alterar(FlaskForm):
     valor = DecimalField('ValorTotal',validators=[Datarequired(),Length(min = 1)],use_locale = True)

routes.py

from flask import render_template,flash,redirect,url_for,request
from app import app,db
from app.forms import Alterar
from app.models import Orders
@app.route('/v_info/<id_order>',methods=['GET,POST'])
    def v_info(id_order):
    table = db.session.query(Orders).filter(Orders.id_ord == id_order).first()
    form = Alterar(request.form,obj=table)
    return render_template('v_info.html',data = table,form = form)

最后,我得到的错误

Traceback (most recent call last):
  File "c:\anaconda3\lib\site-packages\flask\app.py",line 2447,in wsgi_app
    response = self.full_dispatch_request()
  File "c:\anaconda3\lib\site-packages\flask\app.py",line 1952,in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\anaconda3\lib\site-packages\flask\app.py",line 1821,in handle_user_exception
    reraise(exc_type,exc_value,tb)
  File "c:\anaconda3\lib\site-packages\flask\_compat.py",line 39,in reraise
    raise value
  File "c:\anaconda3\lib\site-packages\flask\app.py",line 1950,in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\anaconda3\lib\site-packages\flask\app.py",line 1936,in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\MS\websiteProject\app\routes.py",line 78,in v_info
    form = Alterar(request.form,obj=table)
  File "c:\anaconda3\lib\site-packages\wtforms\form.py",line 208,in __call__
    return type.__call__(cls,*args,**kwargs)
  File "c:\anaconda3\lib\site-packages\flask_wtf\form.py",line 87,in __init__
    super(FlaskForm,self).__init__(formdata=formdata,**kwargs)
  File "c:\anaconda3\lib\site-packages\wtforms\form.py",line 268,in __init__
    super(Form,self).__init__(self._unbound_fields,Meta=Meta_obj,prefix=prefix)
  File "c:\anaconda3\lib\site-packages\wtforms\form.py",line 51,in __init__
    field = Meta.bind_field(self,unbound_field,options)
  File "c:\anaconda3\lib\site-packages\wtforms\Meta.py",line 27,in bind_field
    return unbound_field.bind(form=form,**options)
  File "c:\anaconda3\lib\site-packages\wtforms\fields\core.py",line 376,in bind
    return self.field_class(*self.args,**kw)
  File "c:\anaconda3\lib\site-packages\wtforms\fields\core.py",line 663,in __init__
    super(DecimalField,self).__init__(label,validators,**kwargs)
  File "c:\anaconda3\lib\site-packages\wtforms\fields\core.py",line 588,in __init__
    self.locale = kwargs['_form'].Meta.locales[0]
TypeError: 'bool' object is not subscriptable
127.0.0.1 - - [26/Sep/2020 07:42:48] "[35m[1mGET /v_info/1234 HTTP/1.1[0m" 500 -

我了解到布尔对象不可下标,但是,我应该在'use_locale'参数中传递什么?来自文档的有关该类的详细信息:

class wtforms.fields.DecimalField(default field arguments,places=2,rounding=None,use_locale=False,number_format=None)[source]¶

    A text field which displays and coerces data of the decimal.Decimal type.

    Parameters

            places – How many decimal places to quantize the value to for display on form. If None,does not quantize value.

            rounding – How to round the value during quantize,for example decimal.ROUND_UP. If unset,uses the rounding value from the current thread’s context.

            use_locale – If True,use locale-based number formatting. Locale-based number formatting requires the ‘babel’ package.

            number_format – Optional number format for locale. If omitted,use the default decimal format for the locale.

解决方法

如果只想查看格式值,则可以定义一个过滤器并将其应用于模板:

ptr

如果您想将其添加到输入字段中,也许您可​​以尝试使用filters(不确定是否可以使用):

int

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。