Доступ к значению столбца из свойства отношения - PullRequest
0 голосов
/ 11 ноября 2018

Предположим, что в следующем примере у нас есть два models, каждый из которых ссылается на соответствующие таблицы 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 для отображения query в виде таблицы:

{% 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 %}

Как видите, получение данных первого столбца pi.at_date с использованием отношений sqlalchemy относительно просто. Результирующая таблица jinja2 отображает at_date из дочерней таблицы supplier_invoices вместе с соответствующими данными столбца pi_lot_name из родительской таблицы product_inventory, с которой она соединена.

Однако этот relationship возвращает только столбец at_date.

Как можно получить столбец at_shortnumber в том же model, чтобы отобразить его вдоль столбца at_date?

Очевидно, что одним из решений было бы создание новых отдельных отношений model, но мне это кажется обременительным, поскольку, если кто-то хочет получить, скажем, 10 столбцов, нам нужно будет установить 10 отдельных model отношений.

Есть ли у кого-нибудь предложения относительно того, как извлечь данные из нескольких столбцов из связанной таблицы, используя один и тот же model? Или, возможно, совершенно другой способ достижения того же результата?

Заранее спасибо!

edit: дополнительно, как можно назначить родительское имя в родительском классе модели для данных дочернего столбца, чтобы можно было манипулировать данными непосредственно из класса модели? Например, если вы хотите использовать: concat = column_property(pi_shortnumber + "_" + pi_lot_name + "_" + at_shortnumber )

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете получить к нему доступ как pd.at_date.at_shortnumber. Из вашего кода pq.at_date возвращает at_date значение ответа ядра SupplierInvoices, что правильно, то, что он на самом деле делает, - pq.at_date.at_date. Но у вас есть общие имена с supplier_invoices.at_date, поэтому возникает путаница. Измените имя столбца на supplier_invoices.at_date или имя отношения на product_inventory.at_date.

...