remove query many delete binds python sqlalchemy flask one-to-many flask-sqlalchemy

python - query - AttributeError: el objeto ''int'' no tiene atributo ''_sa_instance_state''



sqlalchemy query (2)

Estoy trabajando en la plantilla del foro usando Flask. Cuando intento crear un nuevo hilo en el navegador utilizando formularios, SQLAlchemy lanza un AttributeError. El problema apareció cuando traté de implementar una relación uno a muchos con Forum-to-Thread y una relación de uno a muchos con Thread-to-User.

models.py

class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(32), index=True, unique=True) password = db.Column(db.String(32), index=True) email = db.Column(db.String(120), index=True, unique=True) role = db.Column(db.SmallInteger, default=ROLE_USER) posts = db.relationship(''Post'', backref=''author'', lazy=''dynamic'') class Forum(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128)) description = db.Column(db.Text) threads = db.relationship(''Thread'', backref=''forum'', lazy=''dynamic'') class Thread(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128)) author= db.Column(db.String(32)) timestamp = db.Column(db.DateTime) forum_id = db.Column(db.Integer, db.ForeignKey(''forum.id'')) posts = db.relationship(''Post'', backref=''thread'', lazy=''dynamic'') class Post(db.Model): id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime) thread_id = db.Column(db.Integer, db.ForeignKey(''thread.id'')) user_id = db.Column(db.Integer, db.ForeignKey(''user.id''))

Todas las nuevas publicaciones / hilos y manejadas dentro de views.py

views.py

@app.route(''/forum/id=<id>/submit'', methods=[''GET'',''POST'']) @login_required def new_thread(id): form = ThreadForm() forum = Forum.query.filter_by(id=id).first() if form.validate_on_submit(): thread = Thread(title=form.title.data, author=g.user.username, timestamp=datetime.utcnow()) db.session.add(thread) db.session.flush() post = Post(body=form.body.data, timestamp=datetime.utcnow(), thread=thread.id, author=g.user.id) db.session.add(post) db.session.commit() flash(''Post successful.'') return redirect(url_for(''forum_index'', id=id)) return render_template(''forum/thread_submit.html'', title=forum.title, form=form)


También es posible que el nombre del campo no esté apuntando correctamente:

class ThreadFrom(FlaskForm): title = StringField(''title'', [validators.Length(max=128)]) author= StringField(''author'', [validators.Length(max=32)]) timestamp = DateField() forum = SelectField()

En lugar de forum debe ser forum_id


el problema es este:

post = Post(body=form.body.data, timestamp=datetime.utcnow(), thread=thread.id, author=g.user.id)

Desea trabajar con objetos ORM, no con columnas de clave principal:

post = Post(body=form.body.data, timestamp=datetime.utcnow(), thread=thread, author=g.user)

el error significa que un entero se interpreta como un objeto ORM.