如何使用sqlalchemy插入选择字段?

时间:2019-05-27 18:23:51

标签: python-3.x flask-wtforms

我有一个表单,其中有一个文本字段和一个选择字段,而我的问题是如何在选择字段中插入bd,表中的此字段是一个外部键,我需要插入选择字段的值。 非常感谢您的帮助。

@detalle_grupo_estadisticas.route("/show/<id>", methods = ['GET', 'POST']) 
def show(id): 
    title = 'Grupo estadisticas'
    page = 1
    per_page = 3
    CamposGrupo = forms.Fields_Detalle_Grupo_Estadisticas(request.form)
    grup_list = GrupoEstadisticas.query.all()

    if request.method == 'POST' and CamposGrupo.validate():
        grupo_edit = DetalleGrupoEstadisticas.query.filter_by(id_detalle_grupo_estadisticas=id).first()
        grupo_edit.nombre = CamposGrupo.Nombre.Data
        grupo_edit.id_grupoEstadisticas = CamposGrupo.GrupoEstadistica.Value
        db.session.add(grupo_edit)
        db.session.commit()
        return  redirect(url_for('detalle_grupo_estadisticas.index'))

    grupo = DetalleGrupoEstadisticas.query.filter_by(id_detalle_grupo_estadisticas=id).first() 
    CamposGrupo.Nombre.data = grupo.nombre
    CamposGrupo.GrupoEstadistica.choices=[(g.id_grupoEstadisticas,g.nombre) for g in grup_list]
    return render_template('/detalle_grupo_estadisticas/show.html', title=title, CamposGrupo = CamposGrupo, grupo = grupo)

我要插入的是字段选择字段的值

这些是模型

class DetalleGrupoEstadisticas(db.Model):
    __tablename__ = 'detalle_grupo_estadisticas'
    id_detalle_grupo_estadisticas = db.Column(db.Integer, primary_key=True)

    nombre = db.Column(db.String(80), nullable=False)
    id_grupoEstadisticas = db.Column(db.Integer, db.ForeignKey('grupo_estadisticas.id_grupoEstadisticas'))

    grupoestadistica = db.relationship('GrupoEstadisticas', back_populates='detallesgrupo', lazy=True)

class GrupoEstadisticas(db.Model):
    __tablename__ = 'grupo_estadisticas'
    id_grupoEstadisticas = db.Column(db.Integer, primary_key=True)

    nombre = db.Column(db.String(80), nullable=False)
    descripcion = db.Column(db.String(200), nullable=False)

    estadisticas= db.relationship('Estadisticas', back_populates='grupoestadisticas', lazy=True)
    detallesgrupo= db.relationship('DetalleGrupoEstadisticas', back_populates='grupoestadistica', lazy=True)

1 个答案:

答案 0 :(得分:0)

这就是我解决问题的方式。

视图

@detalle_grupo_estadisticas.route("/show/<id>", methods = ['GET', 'POST']) 
def show(id): 
    title = 'Grupo estadisticas'
    page = 1
    per_page = 3
    CamposGrupo = forms.Fields_Detalle_Grupo_Estadisticas(request.form)
    grup_list = GrupoEstadisticas.query.all()
    if request.method == 'POST' and CamposGrupo.validate():

        grupo_edit = DetalleGrupoEstadisticas.query.filter_by(id_detalle_grupo_estadisticas=id).first()
        grupo_edit.nombre = CamposGrupo.Nombre.data
        grupo_edit.grupoestadistica = CamposGrupo.GrupoEstadistica.data
        #this is where I had the error that I was inserting in id_grupoStadisticas and it had to be with the variable of the relationship
        db.session.add(grupo_edit)
        db.session.commit()
        return  redirect(url_for('detalle_grupo_estadisticas.index'))

    grupo = DetalleGrupoEstadisticas.query.filter_by(id_detalle_grupo_estadisticas=id).first() 
    CamposGrupo.Nombre.data = grupo.nombre
    CamposGrupo.GrupoEstadistica.choices=[(g.id_grupoEstadisticas,g.nombre) for g in grup_list]
    return render_template('/detalle_grupo_estadisticas/show.html', title=title, CamposGrupo = CamposGrupo, grupo = grupo)

表格

class Fields_Detalle_Grupo_Estadisticas(Form): 
    Nombre = StringField('Grupo', validators=[InputRequired(), Length(min=2, max=30, message = 'Mayor a 2 caracteres y menor a 30')]) 
    GrupoEstadistica = QuerySelectField('Grupo Estadistica',query_factory=lambda: GrupoEstadisticas.query,
                                        get_pk=lambda g: g.id_grupoEstadisticas,
                                        get_label=lambda g: g.nombre)