我正在使用 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/