Включение нескольких продуктов в одну таблицу HTML? - PullRequest
0 голосов
/ 12 марта 2020

У меня проблема с этим HTML, так как он создает разные таблицы, группируя продукт по имени. Например: продукт A и продукт B. Продукт A отображается в одной таблице, а продукт B отображается в другой таблице. Я хотел бы соединить его так, чтобы он отображался в одной таблице. рамки odoo

. xml

<template id="inventario_report">

    <t t-call="web.html_container">

        <t t-call="web.internal_layout">

            <div class="article">

                <t t-foreach="docs" t-as="doc">

                    <table style="border:1px solid black;border-collapse:collapse;width:100%">

                        <th colspan="2" style="border:1px solid black;text-align:center"><span>Inventario</span></th>

                        <tbody>

                            <tr>

                                <td style="border:1px solid black;width:50%;text-align:center"><strong>Producto</strong></td>

                                <td style="border:1px solid black;width:50%;text-align:center"><strong>Stock</strong></td>

                            </tr>

                            <t t-foreach="doc.get('vals')" t-as="val">

                                <tr>

                                    <td style="text-align:center"><t t-esc="val.get('producto')"/></td>

                                    <td style="text-align:center"><t t-esc="val.get('stock')"/></td>

                                </tr>

                            </t>

                        </tbody>

                    </table>

                    <p></p>

                </t>

            </div>

        </t>

    </t>

.py

def get_values(self,star,end):

    docs = []

    product_ids = []

    detail = 

self.env [ 'proyecto_r c .detalle_documento']. search ([('date', '> =', star), ('date', '<=', end)]) </p>

    for de in detail:

        vals = {

            'product': de.product_id.name,

            'stock': de.product_id.stock,

        }

        if de.product_id.id in product_ids:

            pass

        else:

            product_ids.append(de.product_id.id)

            docs.append({

                'product': de.product_id.name,

                'vals': [vals],

            })

    return docs

image

1 Ответ

1 голос
/ 12 марта 2020

Легко понять, почему ваша реализация не может достичь того, что вы ожидали.

Во-первых, обратите внимание, что в шаблоне вы l oop над списком docs, так что каждый элемент в docs list создаст дополнительную таблицу (с заголовком):

<t t-foreach="docs" t-as="doc">
  <table style="border:1px solid b....

Затем внутри этой таблицы вы создадите дополнительную строку для каждого элемента списка vals внутри элемента в docs список, над которым вы зацикливаетесь.

<t t-foreach="doc.get('vals')" t-as="val">
  <tr>
    <td style="text-align:center"><t t-esc="val.get('producto')"/></td>
    <td style="text-align:center"><t t-esc="val.get('stock')"/></td>
  </tr>
</t>

Однако в сценарии python:

for de in detail:
   ...
        docs.append({
            'product': de.product_id.name,
            'vals': [vals],
        })

Вы добавляете новый элемент в таблицу docs для каждого элемента в detail, поэтому создайте новую таблицу в шаблоне.

Вместо этого добавьте к vals, а не к документам:

def get_values(self, star, end):

    docs = []
    product_ids = []
    detail = ... # However you get your document

    vals = [] # Create the list of values of the document

    for de in detail:

        if de.product_id.id in product_ids:
            pass

         else:
            product_ids.append(de.product_id.id)

            vals.append({
                'product': de.product_id.name,
                'stock': de.product_id.stock,
            })

    docs.append(vals)

Конечный продукт должен выглядеть следующим образом:
Если у нас было два документа, один на фрукты и другой список канцелярских принадлежностей,

docs = [[{'product': 'bananas', 'stock', 1}, {'product': 'apples', 'stock', 1}], [{'product': 'staples', 'stock', 1}, {'product': 'paper', 'stock', 1}]]

Если вы хотите получить доступ к нескольким документам, просто оберните l oop в другой l oop, меняя каждый документ время

РЕДАКТИРОВАТЬ: вам придется изменить Эта строка

<t t-foreach="doc.get('vals')" t-as="val">

к этой

<t t-foreach="doc" t-as="val">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...