Получить подсчет внешнего ключа в запросе с использованием SQLAlchemy - PullRequest
0 голосов
/ 03 июня 2019

Я работаю над примером / обучающим блог-проектом, и у меня есть два класса в models.py (см. Ниже) с именами Post и Comment. Post содержит информацию о сообщении в блоге, а Comment содержит ответы на каждое сообщение.

Models.py

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    title = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    comments = db.relationship('Comment', backref='blogpost', lazy='dynamic')



class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    reply = db.Column(db.String(500))
    commentor = db.Column(db.String(64))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

Я хотел бы запросить класс Post, одновременно возвращая счетчик Comment.reply в каждом сообщении в блоге.

Мой запрос в настоящее время к классу Post выглядит следующим образом:

@app.route('/index')
def explore():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.timestamp.desc()).paginate(
        page, app.config['POSTS_PER_PAGE'], False)
    next_url = url_for('explore', page=posts.next_num) \
        if posts.has_next else None
    prev_url = url_for('explore', page=posts.prev_num) \
        if posts.has_prev else None
    return render_template("index.html", title='Explore', posts=posts.items,
                          next_url=next_url, prev_url=prev_url)

Вопрос: Как мне получить счет reply на каждый Post, используя Flask и SQLAlchemy?

1 Ответ

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

Способ справиться с этим, когда вы выполните запрос на posts, вы можете использовать {{posts.comments.count ()}} в шаблоне для доступа к связанным комментариям, так как это отношение один ко многим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...