python - 从 flask-sqlalchemy 中的连接查询中读取

标签 python flask jinja2 flask-sqlalchemy flask-wtforms

成功连接两个数据库表后,我试图通过寻址第一个表从第二个表中读取数据。我正在从我的 jinja2 模板中寻址 opinion.topic_name,但没有返回任何内容。 如何从连接的查询中访问 Topic.topic_name 值?

查看

@main.route('/', methods=['GET', 'POST'])
def index():
    form = IndexForm()
    opinions = []
    if form.validate_on_submit():
        opinions = Opinion.query
                    .filter_by(party_id=form.party.data)
                    .filter_by(topic_id=form.topic.data)
                    .join('topic')
                    .all()
    return render_template('index.html', form=form, opinions=opinions)

模型

class Opinion(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(2000))
    topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'))
    party_id = db.Column(db.Integer, db.ForeignKey('party.id'))

class Topic(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    topic_name = db.Column(db.String(64))
    opinions = db.relationship(Opinion, backref='topic')

模板(jinja2)

<div>
    {{ wtf.quick_form(form) }}
</div>
<div>
    {% for opinion in opinions %}
    <div class='jumbotron'>
        <h1>{{ opinion.topic_name }}</h1>
        <p>{{ opinion.text }}</p>
    </div>
    {% endfor %}
</div>

最佳答案

这个查询:

opinions = Opinion.query
                    .filter_by(party_id=form.party.data)
                    .filter_by(topic_id=form.topic.data)
                    .join(Topic)
                    .all()

将返回意见模型列表,因为在您的关系中 Topic模型,您将其定义为:

opinions = db.relationship(Opinion, backref='topic')

然后,在您的 jinja2 模板中访问 Topic.topic_name ,你应该这样做:

<h1>{{ opinion.topic.topic_name }}</h1>

关于python - 从 flask-sqlalchemy 中的连接查询中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41649124/

相关文章:

python - 如何从 Pandas 数据框的多列中获取唯一信息?

javascript - 解码来自 Ajax 调用的 Json 响应

javascript - 如何让 Flask 为我的 .js 文件提供服务?

python - 如何修复,TypeError : unsupported operand type(s) for %: 'NoneType' and 'int'

python - 如何在 Python 中键入注释 JSON 数据?

python - matplotlib 中的矩形位置不正确

python - netloc 是什么意思?

python - 作为线程启动 Flask 服务器

python - 如何通过 Flask 中的 url_for() 检查静态文件是否存在?

variables - Ansible:在循环中生成变量