gpt4 book ai didi

python - 阅读连接查询 Sqlalchemy Jinja

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:16 25 4
gpt4 key购买 nike

我正在尝试显示另一个由外键链接的表中的医生名字。我可以显示 doctor_id 但无法显示他的名字。

我看了这个解决方案 reading from joined query in flask-sqlalchemy但它略有不同,因为我从另一端查询并且不能使用 backref 值作为引用。我已经删除了不相关的代码。

 class Appointment(db.Model):
id = db.Column(db.Integer, primary_key=True)
patient_id = db.Column(db.Integer, db.ForeignKey('patient.id'),
nullable=False)
doctor_id = db.Column(db.Integer, db.ForeignKey('doctor.id'),
nullable=False)

class Doctor(db.Model):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(30), unique=False, nullable=False)
appointments = db.relationship('Appointment', backref =
db.backref('doctor',lazy=True))

和查询

all_appmts = db.session.query(Appointment)
.filter_by(patient_id=id)
.join(Doctor)

result =appointments_schema.dump(all_appmts)
return render_template('patient.html', all_appointments=result.data)

这是我尝试过的

 {% for a in all_appointments %}
<td>{{ a.doctor_id.first_name }}</td>
{% endfor %}

显示的医生姓名应基于该预约的医生 ID。

这是棉花糖部分。

class AppointmentSchema(ma.Schema):
class Meta:
# Fields to expose
fields = ('id','start_datetime', 'end_datetime', 'title',
'patient_id', 'doctor_id')

appointments_schema = AppointmentSchema(many=True)

最佳答案

您正在尝试访问 doctor_id.first_name。但是关系的名称是 doctor。如果您将查询结果转换为字典列表,那么您还应该序列化 appointment.doctor 关系,以便字典看起来像

{
id: 12,
doctor: {
id: 34
}
}

然后就可以这样访问了

 <td>{{ a.doctor.first_name }}</td>

但是如果你只是打算在 jinja 模板中使用它,那么序列化对象有什么必要呢?相反,您可以将 query.all() 的结果传递给模板。 Jinja 可以直接访问 python 对象并显示数据。因此,不要使用 result =appointments_schema.dump(all_appmts),而是尝试这样做

all_appmts = db.session.query(Appointment)
.filter_by(patient_id=id)
.join(Doctor)
return render_template('patient.html', all_appointments=all_aptmts.all())

然后保持神社模板不变

 {% for a in all_appointments %}
<td>{{ a.doctor.first_name }}</td>
{% endfor %}

它会起作用

关于python - 阅读连接查询 Sqlalchemy Jinja,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52584099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com