wtf validate_on_submit passwordfield flaskform fileallowed python flask flask-sqlalchemy wtforms flask-wtforms

python - validate_on_submit - wtforms fileallowed



sqlalchemy.exc.InterfaceError:<objeto de InterfaceError no imprimible> (2)

En la definición de clase de tabla, necesita agregar una línea más para completar la relación de clave externa.

class Post(db.Model): __tablename__ = ''blog_posts'' id = db.Column(db.Integer, unique=True, primary_key=True) title = db.Column(db.String(50), unique=False) content = db.Column(db.Text, unique=False) user_id = db.Column(db.String, db.ForeignKey(''users.username'')) # Setup the relationship to the User table users = db.relationship(User)

Estaba teniendo el mismo mensaje de error en una aplicación que funcionaba un día y luego no la siguiente. Me volvió loco, la solución fue que había eliminado una relación () en alguna parte.

Estoy probando Flask pero estoy teniendo el error sqlalchemy.exc.InterfaceError: <unprintable InterfaceError object> al enviar un wtforms. La clase de modelo es:

class Post(db.Model): __tablename__ = ''blog_posts'' id = db.Column(db.Integer, unique=True, primary_key=True) title = db.Column(db.String(50), unique=False) content = db.Column(db.Text, unique=False) user_id = db.Column(db.String, db.ForeignKey(''users.username'')) @staticmethod def post_new_entry(title, content, user_id): """ Post new entry to database """ new_post = Post(title=title, content=content, user_id=user_id) db.session.add(new_post) db.session.commit() return new_post def __repr__(self): return ''PostID {}: {} by {}''.format(self.id, self.title, self.user_id)

Para mi formulario, tengo lo siguiente:

class PostForm(Form): title = StringField(''Title'', validators=[DataRequired(), Length(10, 65)]) post_content = TextAreaField(''Content'', validators=[DataRequired(), Length(50, 500)]) submit = SubmitField(''Publish Post'')

La ruta es:

@main.route(''/new_post/'', methods=[''GET'', ''POST'']) @login_required def add_post(): form = PostForm() if form.validate_on_submit(): Post.post_new_entry(title=form.title.data, content=form.post_content.data, user_id=current_user) flash("Amazing stuff! Thanks for your submission.") return redirect(url_for(''main.index'')) return render_template(''single.html'', form=form)

En mi html, estoy importando el wtf.html del frasco-bootstrap:

{{ wtf.quick_form(form) }}

El formulario muestra a la derecha pero obtengo el error anterior en el envío del formulario. Cualquier consejo o idea sobre cómo proceder sería útil.

Gracias


En def add_post() escribe user_id=current_user , pero eso no es correcto.

Como definiste para la class Post :

user_id = db.Column(db.String, db.ForeignKey(''users.username''))

En def add_post() debe usar user_id=current_user.username .