从 flask-sqlalchemy 中的连接查询中读取
reading from joined query in flask-sqlalchemy
成功加入两个数据库 table 后,我试图通过寻址第一个 table 从第二个 table 读取数据。我正在从我的 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()
将 return 意见模型列表,并且由于在 Topic
模型中的关系中,您将其定义为:
opinions = db.relationship(Opinion, backref='topic')
然后,在您的 jinja2 模板中,要访问 Topic.topic_name
,您应该这样做:
<h1>{{ opinion.topic.topic_name }}</h1>
成功加入两个数据库 table 后,我试图通过寻址第一个 table 从第二个 table 读取数据。我正在从我的 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()
将 return 意见模型列表,并且由于在 Topic
模型中的关系中,您将其定义为:
opinions = db.relationship(Opinion, backref='topic')
然后,在您的 jinja2 模板中,要访问 Topic.topic_name
,您应该这样做:
<h1>{{ opinion.topic.topic_name }}</h1>