在一个字段中显示3个字段输入

时间:2013-08-02 22:45:49

标签: python orm module field openerp

我想知道是否有某种方式可以在一个字段中显示,这是另外三个字段的串联,已经采用相同的形式。

例如:

'field_1' : fields.integer('Campo 1'),
 field_2' : fields.integer('Campo 2'),
 field_3' : fields.integer('Campo 3'),

然后显示在一个字段中连接的这3个字段的输入:

field_concatenated : fields.related(?)('field_1', 'field_2', 'field_3', 'Name of the field'),

我放了'?'标志因为我实际上不知道如何实现这一点,也许使用related类型?顺便说一句,3个字段在同一个类表格中。

结果字段可以是readonly,并在表单保存后显示。

我希望我已经解释过了。

提前致谢

EDIT

字段可以是integerchar

类型
2nd EDIT

实际例子:

'empresa' : fields.integer('Empresa'),
'provee' : fields.integer('Proveedor'),
'soli_cant' : fields.integer('Cantidad de Solicitudes'),
'dest' : fields.char('Destino'),
'anho' : fields.integer('Año'),

因此,在手动填充这些字段后,结果字段必须以empresa-proveesoli_cant-dest-anho

的格式显示这4个字段的串联

一个接一个地proveesoli_cant,(如果不能使用' - ')如果不可能那么那就显示没有分隔符的串联

也许它不一定在python代码上声明,也许在xml视图中有一些快捷方式?

<field name="empresa" "provee" "soli_cant" "dest" "anho" /> idk ......

之类的东西
3rd EDIT

我正在使用的实际代码(感谢Ethan Furman):

列:

    'empresa' : fields.integer('Empresa'),
    'provee' : fields.integer('Proveedor'),
    'soli_cant' : fields.integer('Cantidad de Solicitudes'),
    'dest' : fields.char('Destino'),
    'anho' : fields.integer('Año'),

使用它的列的功能:

def _combinalos(self, cr, uid, ids, field_name, args, context=None):
    values = {}
    for id in ids:
        rec = self.browse(cr, uid, [id], context=context)[0]
        values[id] = {}
        values[id][field_name] = '%s %s %s %s %s' %(rec.empresa, rec.provee, rec.soli_cant, rec.dest, rec.anho)
    return values

columns = {
    'nombre' : fields.function(_combinalos, string='Referencia de Pedido', type='char', arg=('empresa','provee','soli_cant', 'dest', 'anho'), method=True),

所有这些当然都在class

然后我从我的xml view这样调用它:

<h1>
   <label string="Request for Quotation " attrs="{'invisible': [('state','not in',('draft','sent'))]}"/>
   <label string="Purchase Order " attrs="{'invisible': [('state','in',('draft','sent'))]}"/>
   <field name="nombre" class="oe_inline" readonly="1" />
</h1>

label string将过滤Request for QuotationPurchase Order

毕竟,我填写了integerchar类型的5个字段,但仍然没有将这些字段“连接”在一个字符串或标题中,只是一个标签说[对象],它可能是label问题?列中的函数的字符串名称可能是?

1 个答案:

答案 0 :(得分:1)

创建一个新的功能字段并将其他三个字段组合在一起:

def _combine(self, cr, uid, ids, field_name, args, context=None):
    values = {}
    for id in ids:
        rec = self.browse(cr, uid, [id], context=context)[0]
        values[id] = {}
        values[id] = '%s %s %s' % (rec.field1, rec.field2, rec.field3)
    return values

_columns = {
    ...
    fields.function(_combine, string='three fields in one!', type='char',
                    arg=('field1','field2','field3'), method=True),

注意:未经测试的代码

_combine方法应该是包含其他列的类的一部分,fields.function也应该在该类“_columns中。