Представление KanBan наследуется с помощью QCode

#odoo #qweb #odoo-13

#odoo #qweb #odoo-13

Вопрос:

Я пытаюсь настроить представление kanban на res.partner

Я хочу перечислить все category_id, связанные с контактом, без использования

 <field name="category_id"  widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}" />
  

Я пытался использовать цикл Qwep t-foreach, но не работает, почему?

 <li t-foreach="record.category_id" t-as="item">
    <t t-esc="item_value"/>
</li>
  

эта печать

 many2many

false

false

[object Object]

false

false

res.users

false

true

false

true

Venditore

[object Object]

7,6

2record
  

мне нужно напечатать имя res.partner.category

в то же время мне нужно создать класс внутри каждого поля kanban с именем каждого category_id что-то вроде

 <div class="oe_kanban_details category_1 category_2">
 ...
  

Спасибо

Ответ №1:

Выполняется цикл по category_id атрибутам записи. Вы получили этот результат, потому что использовали специальную переменную $as_value, это фактические значения следующих атрибутов.

 type
change_default
company_dependent
context
depends
domain
manual
readonly
relation
required
searchable
sortable
store
string
views
raw_value
value
  

Значение raw_value содержит набор записей ids , а значение представляет собой строку, показывающую количество записей.

Вы можете попытаться переопределить контекст qweb записи kanban, чтобы получить category_id данные [{'color':, 'display_name':, 'id': }, ...] из recordData объекта.

Пример

 var KanbanRecord = require('web.KanbanRecord');

KanbanRecord.include({
     _get_M2M_data: function (field) {
        var categories = [];
        if (field in this.recordData amp;amp; this.recordData[field].data) {
            categories = this.recordData.category_id.data;
        }
        return categories;
     },
     _setState: function (recordState) {
        var self = this;
        this._super(recordState);
        self.qweb_context['get_m2m_data'] = self._get_M2M_data.bind(self);
    },
});
  

Затем используйте его в представлении kanban следующим образом:

 <t t-foreach="get_m2m_data('category_id')" t-as="category_data">
    <t t-esc="category_data.data['display_name']"/>
</t>
  

Используйте следующий код, чтобы получить аналогичный результат при использовании тега field:

 <div class="o_kanban_tags_section oe_kanban_partner_categories">
    <span class="oe_kanban_list_many2many">
        <div class="o_field_many2manytags o_field_widget o_kanban_tags">
            <t t-foreach="get_m2m_data('category_id')" t-as="category_data">
                <span t-att-class="'o_tag o_tag_color_'  category_data.data['color']"><span></span><t t-esc="category_data.data['display_name']"/>
                </span>
            </t>
        </div>
    </span>
</div>  
  

Комментарии:

1. Большое вам спасибо. Все достаточно ясно, я изучу это. Только одна вещь, показывающая данные внутри this.recordData я не могу видеть свои пользовательские поля (одно из этих many2many), созданные на res.partner почему?