Как отсортировать записи по последовательности вместо имени в виджете Odoo OCA web_widget_x2many_2d_matrix?
Я уже пытаюсь без успеха сортировать по последовательности dict записей по jquery. Я не знаю, где отсортировано по имени.
Я спрашиваю сообщество об git, но никто не отвечает мне, я пытаюсь сортировать по очереди. используя модули web_widget_x2many_2d_matrix и sale_order_variant_mgmt
Я изменяю код python, и если я отлаживаю список записей, то сортировка предназначена, но когда загружается код javascript, он сортируется по имени и отлаживается, если проблема
@api.onchange('product_tmpl_id')
def _onchange_product_tmpl_id(self):
self.variant_line_ids = [(6, 0, [])]
template = self.product_tmpl_id
context = self.env.context
record = self.env[context['active_model']].browse(context['active_id'])
if context['active_model'] == 'sale.order.line' or context['active_model'] == 'sale.order.line_group': #TODO check this modify for lentex group_sale_lines module
sale_order = record.order_id
else:
sale_order = record
num_attrs = len(template.attribute_line_ids)
if not template or not num_attrs:
return
line_x = template.attribute_line_ids[0]
line_y = False if num_attrs == 1 else template.attribute_line_ids[1]
lines = []
for value_x in line_x.value_ids.sorted(key=lambda r: r.sequence):
for value_y in line_y and line_y.value_ids.sorted(key=lambda r: r.sequence) or [False]: #I modify this and in python the sort is the intended, but not in JS
# Filter the corresponding product for that values
values = value_x
if value_y:
values += value_y
product = template.product_variant_ids.filtered(lambda x: not(values - x.attribute_value_ids))[:1]
order_line = sale_order.order_line.filtered(lambda x: x.product_id == product)[:1]
lines.append((0, 0, {
'product_id': product,
'disabled': not bool(product),
'value_x': value_x,
'value_y': value_y,
'product_uom_qty': order_line.product_uom_qty,
}))
self.variant_line_ids = lines
Я думаю, проблема здесь
// get x axis values in the correct order
get_x_axis_values: function()
{
return _.keys(this.by_x_axis); //I think here is where the order is defined
},
// get y axis values in the correct order
get_y_axis_values: function()
{
return _.keys(this.by_y_axis); //I think here is where the order is defined
},
Ответы
Ответ 1
Похоже, что вы сортируете словарь, но словари не имеют или не поддерживают порядок.
Создайте временный список, чтобы удерживать значения ключа в порядке, основанном на значении, затем перебирайте этот список для обработки значений словаря в нужном порядке.
в качестве альтернативы вы можете использовать "OrderedDict" в python from collections import OrderedDict