python-3.x - Flask FloatField 在尝试保存数据时抛出错误
问题描述
我创建了一个模型和表单,在其中定义了一些浮点数据:
class Paciente(db.Model):
id = db.Column(db.Integer, primary_key=True)
nombres = db.Column(db.String(40),unique=True, nullable=False)
apellidos = db.Column(db.String(40),unique=True, nullable=False)
fecha_nacimiento = db.Column(db.DateTime,nullable=False)
semanas_gestacion = db.Column(db.Integer,nullable=False)
soplo_cardiaco = db.Column(db.Integer, nullable=False)
peso = db.Column(db.Float, nullable=False)
satO2_miembroSup = db.Column(db.Float, nullable=False)
satO2_miembroSup24 = db.Column(db.Float, nullable=False)
class PacienteForm(FlaskForm):
nombres = StringField('Nombres',validators=[DataRequired(), Length(min=2, max=20)])
apellidos = StringField('Apellidos',validators=[DataRequired(), Length(min=2, max=30)])
fecha_nacimiento = DateField('Fecha de nacimiento', format='%Y-%m-%d')
semanas_gestacion = IntegerField('Semanas de gestacion',widget=NumberInput(),validators=[InputRequired(), NumberRange(min=0, max=50, message="Valores de 0 a 50")])
soplo_cardiaco = SelectField('Soplo cardíaco',
choices=[
(1, 'Si'),
(0, 'No')])
peso = FloatField('peso',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
satO2_miembroSup = FloatField('Saturacion de O2 - miembro superior al nacimiento',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
satO2_miembroSup24 = FloatField('Saturacion de O2 - miembro superior al nacimiento 24 horas',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
satO2_miembroSup72 = FloatField('Saturacion de O2 - miembro superior al nacimiento 72 horas',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
satO2_miembroInf = FloatField('Saturacion de O2 - miembro inferior al nacimiento',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
satO2_miembroInf24 = FloatField('Saturacion de O2 - miembro inferior al nacimiento 24 horas',widget=NumberInput(),default=1.0,
validators=[NumberRange(0, 1E+20)])
但是,当我尝试从表单中保存数据时出现错误,它说我应该引入一个有效值:
我已经添加了方法:
class CommaFloatField(FloatField):
"""
Subclass that handles floats of this format 1.2 or 1,2.
"""
def process_formdata(self, valuelist):
if valuelist:
try:
self.data = float(valuelist[0].replace(",", "."))
except ValueError:
self.data = None
raise ValueError(self.gettext('Not a valid float value'))
但我无法保存任何浮点值,我非常感谢一些帮助!提前谢谢你们!
解决方案
您看到的是浏览器错误。如果您使用的是 Chrome,您应该知道句点 '.' 用作小数点,而不是逗号。
您可以novalidate
在表单中设置 attr 以避免浏览器验证。
推荐阅读
- jsf - 更新(仅选择父面板)多个包含的输入组件 JSF 包含在对话框中,primefaces
- azure - 授予功能跨租户 Azure RM 访问权限
- r - 如何将循环的结果写入R中的csv文件?
- azure - 隐藏的 VM Azure 市场部署
- php - 使用 php 和 mysql 插入 xml
- reactjs - 如何重定向到父组件
- javascript - 复选框不会改变视觉状态
- php - 需要澄清:Yii2、MySQL 过程和临时表
- security - 弱内容安全策略 (CSP) 会污染同一域中的 Web 应用程序吗?
- ios - 如何使用“Optional 的概述副本”消息调试崩溃?