родительские дочерние элементы и фильтрация между ними

#odoo #odoo-9

#odoo #odoo-9

Вопрос:

Итак, у меня есть 3 категории. во-первых, без дочерних элементов, во-вторых, всегда есть дочерний элемент, но иногда у него нет родителя, а иногда есть, и третья категория всегда без родителя.

И моя цель — перейти к этим 3 категориям, начиная снизу вверх.

сначала мне нужно проверить категорию без дочерних элементов, вторую категорию secodn, а затем третью.

если мое условие выполнено, я просто удаляю сообщение, если условия не выполняются, я перехожу в другую категорию и проверяю условие.

итак, я написал этот код, и это вроде как нормально, но, может быть, я мог бы сделать это, не повторяясь, и сделать свой код более простым?

  msg = _("some %s %s message: %s.")
    msgs = []
for line in order.order_line:
    parent_id = line.product_id.categ_id.parent_id
    parent_parent = line.product_id.categ_id.parent_id
    categ_id = line.product_id.categ_id
    categorys = parent_id   parent_parent   categ_id
categorys = parent_id   parent_parent   categ_id
for categ in categorys:
    if not categ.childs_id and categ.qty_for_discount:
        if line.product_qty < categ.qty_for_discount:
            msgs.append(
                msg % (
                    categ.qty_for_discount - line.product_qty,
                    line.product_id.uom_id.name,
                    categ.name
                )
            )
    elif categ.parent_id and categ.child_id and categ.qty_for_discount:
        if line.product_qty < categ.qty_for_discount:
            msgs.append(
                msg % (
                    categ.qty_for_discount - line.product_qty,
                    line.product_id.uom_id.name,
                    categ.name
                )
            )
    else:
        if line.product_qty < categ.qty_for_discount:
            msgs.append(
                msg % (
                    categ.qty_for_discount - line.product_qty,
                    line.product_id.uom_id.name,
                    categ.name
                )
            )
  

Ответ №1:

Воспользуйтесь преимуществами переменной области видимости Python. Попробуйте что-то вроде этого:

 def your_method(self):
    msgs = []
    def append_msg():
        msgs.append( _("some %s %s message: %s.")% (
            categ.qty_for_discount - line.product_qty,
            line.product_id.uom_id.name,
            categ.name
        ))
    for line in order.order_line:
        parent_id = line.product_id.categ_id.parent_id
        parent_parent = line.product_id.categ_id.parent_id
        categ_id = line.product_id.categ_id
        categories = parent_id   parent_parent   categ_id
        categories = parent_id   parent_parent   categ_id
        for categ in categories:
            if not categ.childs_id and categ.qty_for_discount:
                if line.product_qty < categ.qty_for_discount:
                    append_msg()
            elif categ.parent_id and categ.child_id and categ.qty_for_discount:
                if line.product_qty < categ.qty_for_discount:
                    append_msg()
            else:
                if line.product_qty < categ.qty_for_discount:
                    append_msg()