Легко понять, почему ваша реализация не может достичь того, что вы ожидали.
Во-первых, обратите внимание, что в шаблоне вы 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">