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
.