Flask 应用程序中的 FloatField 条目出现问题
Trouble with FloatField entry in Flask Application
我创建了一个非常简单的 flask crud,我应该可以在其中引入一些浮点值,然后这里有我的模型、表单和路由,我尝试从中保存数据:
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)
satO2_miembroSup72 = db.Column(db.Float, nullable=False)
satO2_miembroInf = db.Column(db.Float, nullable=False)
satO2_miembroInf24 = 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(), Length(min=1, max=2), 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)])
def paciente():
form = PacienteForm()
if form.validate_on_submit():
pacientes = Paciente(nombres=form.nombres.data, apellidos=form.apellidos.data,
fecha_nacimiento=form.fecha_nacimiento.data, semanas_gestacion=form.semanas_gestacion.data,
soplo_cardiaco=form.soplo_cardiaco.data, peso=form.peso.data,
satO2_miembroSu=form.satO2_miembroSu.data, satO2_miembroSup24=form.satO2_miembroSup24.data,
satO2_miembroSup72=form.satO2_miembroSup72.data,
satO2_miembroInf=form.satO2_miembroInf.data,
satO2_miembroInf24=form.satO2_miembroInf24.data,
author=current_user)
db.session.add(pacientes)
db.session.commit()
flash('Paciente creado','success')
return redirect(url_for('dash'))
return render_template('create_patient.html', title='Nuevo paciente', form=form)
但是当我试图保存一些东西时,我得到了这个错误:
类型错误:'int' 类型的对象没有 len()
有谁知道我做错了什么?我真的很感激这方面的帮助!提前非常感谢你们!
在这里声明一个 IntegerField:
semanas_gestacion = IntegerField(
'Semanas de gestacion',
widget=NumberInput(),
validators=[
InputRequired(),
Length(min=1, max=2),
NumberRange(min=0, max=50, message="Valores de 0 a 50")
]
)
但是,你们其中的一个验证器,Length
验证器,对你的 Integerfield
无效,因为整数没有长度。字符串 "142"
的长度为 3,但这不适用于没有整数 142
的整数。
您可以通过简单地删除 Length(min=1, max=2)
参数来解决您的问题,并仅依赖 NumberRange(min=0, max=50)
参数。
我创建了一个非常简单的 flask crud,我应该可以在其中引入一些浮点值,然后这里有我的模型、表单和路由,我尝试从中保存数据:
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)
satO2_miembroSup72 = db.Column(db.Float, nullable=False)
satO2_miembroInf = db.Column(db.Float, nullable=False)
satO2_miembroInf24 = 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(), Length(min=1, max=2), 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)])
def paciente():
form = PacienteForm()
if form.validate_on_submit():
pacientes = Paciente(nombres=form.nombres.data, apellidos=form.apellidos.data,
fecha_nacimiento=form.fecha_nacimiento.data, semanas_gestacion=form.semanas_gestacion.data,
soplo_cardiaco=form.soplo_cardiaco.data, peso=form.peso.data,
satO2_miembroSu=form.satO2_miembroSu.data, satO2_miembroSup24=form.satO2_miembroSup24.data,
satO2_miembroSup72=form.satO2_miembroSup72.data,
satO2_miembroInf=form.satO2_miembroInf.data,
satO2_miembroInf24=form.satO2_miembroInf24.data,
author=current_user)
db.session.add(pacientes)
db.session.commit()
flash('Paciente creado','success')
return redirect(url_for('dash'))
return render_template('create_patient.html', title='Nuevo paciente', form=form)
但是当我试图保存一些东西时,我得到了这个错误: 类型错误:'int' 类型的对象没有 len()
有谁知道我做错了什么?我真的很感激这方面的帮助!提前非常感谢你们!
在这里声明一个 IntegerField:
semanas_gestacion = IntegerField(
'Semanas de gestacion',
widget=NumberInput(),
validators=[
InputRequired(),
Length(min=1, max=2),
NumberRange(min=0, max=50, message="Valores de 0 a 50")
]
)
但是,你们其中的一个验证器,Length
验证器,对你的 Integerfield
无效,因为整数没有长度。字符串 "142"
的长度为 3,但这不适用于没有整数 142
的整数。
您可以通过简单地删除 Length(min=1, max=2)
参数来解决您的问题,并仅依赖 NumberRange(min=0, max=50)
参数。