sqlalchemy.exc.InterfaceError: <unprintable InterfaceError object>

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

I'm trying out Flask but I'm having the error sqlalchemy.exc.InterfaceError: <unprintable InterfaceError object> while submitting a wtforms. The model class is:

 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) 

For my Form, I have the following:

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

The route is:

@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) 

On my html, I'm importing the wtf.html of the flask-bootstrap:

{{ wtf.quick_form(form) }}  

The form shows right but I get the above error on form submission. Any tip or idea on how to proceed would be helpful.

Thanks

回答1:

In your table class definition you need to add one more line to complete the foreign key relationship.

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) 

I was having the same error message in an app which was working one day then not the next. Drove me nuts, the solution was that I had removed a relationship() somewhere.



回答2:

Under def add_post() you write user_id=current_user, but that's not right.

Since you defined for class Post:

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

in def add_post() you should use user_id=current_user.username.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!