Обход отношений SQLAlchemy - TypeError и проблемы с backref - PullRequest
0 голосов
/ 28 июня 2019

После попытки создать сообщение в моем приложении фляги, это сообщение об ошибках появляется 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)
    ...

Вот код для route.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 %}

1 Ответ

0 голосов
/ 28 июня 2019

Вы установили обратную ссылку для отношения colleges_accepted, но не для отношения posts. Таким образом, ваш post объект не знает, как получить его author.

Кроме того, вы объявляете colleges_accepted, но затем используете colleges_accepted_to в своем шаблоне.

...