首页 > 解决方案 > 遍历 SQLAlchemy 关系 - TypeError 和 backref 问题

问题描述

尝试在我的烧瓶应用程序中创建帖子后,出现此错误消息TypeError: 'author' is an invalid keyword argument for Post

这是我的models.py中的以下代码:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    posts = db.relationship('Post', backref='author', lazy=True)
    colleges_accepted = db.relationship('CollegesAccepted', backref='author', lazy=True)
    posts = db.relationship('Post', primaryjoin="User.id==Post.author_id")
    ...

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    ...

class CollegesAccepted(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    ...

这是 routes.py 的代码:

@app.route("/post/new", methods=['GET', 'POST'])
@login_required
def new_post():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(title=form.title.data,
                    content=form.content.data,
                    author=current_user,
                    college_attending=current_user.college_attending)
        db.session.add(post)
        db.session.commit()
        flash('Your post has been created!', 'success')
        return redirect(url_for('home'))
    return render_template('create_post.html', title='New Post', form=form)

但这并没有给我预期的结果 - 显示帖子时,我想显示作者/用户的属性以及帖子内容。我想使用我在 models.py 中定义的关系能够在 html/jinja2 模板中执行类似的操作:

{% for college in post.author.colleges_accepted_to %}
    {{ college }}
{% endfor %}

标签: pythonflaskflask-sqlalchemy

解决方案


您已在关系上设置了 backref colleges_accepted,但没有在posts关系上设置。所以你的post对象不知道如何得到它的author.

此外,您声明colleges_accepted但随后colleges_accepted_to在您的模板中使用。


推荐阅读