我正在使用 OpenERP v7 并在采购订单行窗口中请求以下输出

PO0001      PO0002    PO0003
  Line      Line      Line
  10          10        10
  20          20        20
  30                    30

我的代码:
<field name="order_line" context="{'order_id':active_id}">

_columns={
'sequence':fields.integer('Sequence', store=True),
}
_defaults = {
 lambda obj, cr, uid, context: obj._default_sequence(cr, uid, context)
}
 def _default_sequence(self, cr, uid, context=None):
    if context is None:
        context = {}
    max_sequence = 0
    if context.get('order_id'):
        order_line = self.search(cr, uid, [('order_id', '=', context['order_id'])])
        if order_line:
            max_sequence = max([line['sequence'] for line in self.read(cr, uid, order_line, ['sequence'])])
    return max_sequence + 10

但我得到了这种输出。任何建议都会很棒。
PO0001      PO0002    PO0003
  Line      Line      Line
  10          10        10
  10          10        10
  10                    10

任何人都可以帮助我实现所需的输出。

最佳答案

我认为你做错了。只有在您第一次单击任何按钮操作(添加行以外的按钮)后,才会创建记录。那么只有您才能进行搜索。即使我们不指定上下文,我希望 default 也能获得上下文。仍然没有得到上下文,然后按照 Andrei Boyanov 给出的答案尝试。另外请理解像 active, state, sequence 等字段名称在 openerp 中有一些 超能力 。例如,如果一个表有一个字段“sequence”,那么表的树 View 将具有拖放功能,如果我们进行拖放功能,那么表中每条记录的新序列将被自动计算并保存.

所以我的意见是不要使用序列字段。使用任何其他字段名称。然后将 on_change 方法写入 one2many 字段,并将 one2many 字段名称作为属性传递给 on_change 方法。然后在 on_change 方法中检查添加新行时所有值的内容。如果新行的值的格式为 (0,0,dictionary_with_fields_as_keys_and_its_values_as_values)。然后向该字典添加带有值的序列号。例如:

<field name="order_line" on_change="onchange_line(order_line)">

def onchange_line(self, cr, uid, ids, lines,context=None):
    result = {}
    result['value'] = {}
    #do the proper checking
    count_dict = {}
    count = 10
    had_seq = 0
    for index,line in enumerate(lines):
        if line[0] == 0:
            count_dict[index] = count
            count +=10
        else:
            had_seq +=1
    #seqnece_no is the new sequence field defined
    for k in count_dict:
        if had_seq:
            lines[k][2]['sequence_no'] = had_seq*10 + count_dict[k]
        else:
            lines[k][2]['sequence_no'] = count_dict[k]
    result['value'].update({'order_line':lines})
    return result

请尝试一下。

关于Openerpv7 : Numbeing in OrderLine,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21495783/

10-12 06:05