从Jinja访问SQLAlchemy关系数据

时间:2018-01-18 11:59:58

标签: python sqlalchemy jinja2

我正在尝试从相关数据库表访问数据并在前端的某些表中显示该数据,但很难这样做。这就是我目前所拥有的(简化为重要代码)。

数据库模型:

class Client(Base):
    __tablename__ = 'Client'
    id = db.Column(db.Integer, primary_key=True)
    clientname = db.Column(db.String(50), unique=True, nullable=False)
    provider = db.Column(db.Boolean, default=False)
    sessions = db.relationship('Session', backref='client')
    contacts = db.relationship('Contact', backref='client')
    region_id = db.Column(db.Integer, db.ForeignKey('Region.region_name'),
            nullable=False)

class Contact(Base):
    __tablename__ = 'Contact'
    id = db.Column(db.Integer, primary_key=True)
    contact_name = db.Column(db.String(50), nullable=False)
    contact_phone = db.Column(db.String(50), nullable=False)
    contact_email = db.Column(db.String(50), nullable=False)
    client_id = db.Column(db.Integer, db.ForeignKey('Client.clientname'),
            nullable=False)

然后我的表包含Jinja模板:

<tbody>
      {% for item in client_details %}
          <tr>
         <td>{{ item.clientname }}</td>
         <td>{{ item.contacts.contact_name }}</td>
          </tr>
       {% endfor %}
</tbody>

我传递给我的render_template的查询:

session_details = Session.query.all()
return render_template('tables.session.html', session_details=session_details, passing_alert=passing_alert)

但我无法访问Contact.contact_name。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这是答案:

根据@IljaEverilä评论,当您使用1:n关系时,Client的contact属性是联系人对象的集合,您需要像这样迭代它:

<tbody>
      {% for item in client_details %}
          <tr>
         <td>{{ item.client_name }}</td>
         {% for contact in item.contacts %}
         <td>{{ contact.contact_name }}</td>
         {% endfor %}
          </tr>
       {% endfor %}
</tbody>

您可以像这样呈现模板:

def show_infos():
    client_details = Client.query.all()
    return render_template('index.html', client_details=client_details)