Python 从关系属性访问列值

Python 从关系属性访问列值,python,python-3.x,flask,jinja2,flask-sqlalchemy,Python,Python 3.x,Flask,Jinja2,Flask Sqlalchemy,假设以下示例中有两个模型,每个模型都引用各自的sqlite表: class supplier_invoices(db.Model): id = db.Column('id', db.Integer, primary_key = True) at_date = db.Column(db.String(100)) at_shortnumber = db.Column(db.String(100)) def __repr__(self): return

假设以下示例中有两个
模型
,每个模型都引用各自的
sqlite
表:

class supplier_invoices(db.Model):
  id = db.Column('id', db.Integer, primary_key = True)
  at_date =  db.Column(db.String(100))    
  at_shortnumber =  db.Column(db.String(100))    

  def __repr__(self):
      return str(self.at_date)

class product_inventory(db.Model):
  id = db.Column('id', db.Integer, primary_key = True)
  pi_shortnumber =  db.Column(db.String(100))
  pi_lot_name =  db.Column(db.String(100))
  pi_at_id = db.Column(db.Integer, db.ForeignKey('supplier_invoices.id'),
      nullable=False)
  at_date = relationship("supplier_invoices")

  def __init__(self, id, pi_shortnumber):
    self.id = id
    self.pi_shortnumber = pi_shortnumber


@app.route('/pro_inv/')
def product_inv():
    return render_template('product_inventory.html', 
      product_query = product_inventory.query.order_by(product_inventory.pi_shortnumber.desc()).limit(20).all())
然后假设我们使用以下
jinja2
模板以表格形式显示
查询

{% for pq in product_query %}
<tr>
    <td>
        {{ pi.at_date }}
    </td>
    <td>
        {{ pi.pi_lot_name }}
    </td>
    <td>
        {{ <!-- at_shortnumber --> }} <!-- ******* HOW TO GET SECOND COLUMN DATA HERE? -->
    </td>
    <td>
</tr>
{% endfor %}
{%用于产品中的pq_query%}
{{pi.at_date}
{{pi.pi_lot_name}
{{  }} 
{%endfor%}
正如您所看到的,使用
sqlalchemy
关系检索第一列数据
pi.at_date
,相对简单。生成的
jinja2
表显示了
supplier\u invoices
子表中的
at\u date
,以及与之关联的父
product\u inventory
表中相应的
pi\u批号
列数据

但是,此
关系
仅返回
在日期

如何检索同一
模型中的
at_shortnumber
列,以便在
at_date
列旁边显示它

显然,一个解决方案是创建一个新的独立的
模型
关系,但这对我来说似乎很麻烦,因为如果要检索10列,我们必须建立10个独立的
模型
关系

对于如何使用相同的
模型
从相关表中检索多列数据,有人有什么建议吗?或者可能是以完全不同的方式实现相同的结果

提前谢谢你


编辑:此外,如何将父模型类中的父名称指定给子列数据,以便直接从模型类操作数据?例如,如果希望使用:
concat=column\u属性(pi\u shortnumber+“\u”+pi\u lot\u name+“\u”+at\u shortnumber)
您可以作为
pd.at\u date.at\u shortnumber
访问它。从您的代码
pq.at\u date
返回
at\u date
coresponding
SupplierInvoices
的值。这是正确的,它实际执行的是
pq.at\u date.at\u date
。但是你有它与供应商发票共享名称。在日期,因此混淆。更改
供应商发票的列名称。日期
产品库存的关系名称。日期

Thx!此外,如果你能帮助我编辑以上,将非常感谢。