【问题标题】:Trouble with FloatField entry in Flask ApplicationFlask 应用程序中的 FloatField 条目出现问题
【发布时间】:2019-02-18 22:26:47
【问题描述】:

我创建了一个非常简单的烧瓶 crud,我应该能够在其中引入一些浮点值,然后在这里我有我的模型、Form 和 Route,我尝试从中保存数据:

    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)

但是当我尝试保存一些东西时,我得到了这个错误: TypeError: 'int' 类型的对象没有 len()

有谁知道我做错了什么?我真的很感激这方面的帮助!非常感谢你们!

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy flask-wtforms


    【解决方案1】:

    在这里你声明一个 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) 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2012-11-26
      • 2015-05-08
      • 2021-06-12
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多