1

我想知道是否有某种方法可以在一个字段中显示,其他 3 个字段的串联,已经以相同的形式。

例如:

'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'),

因此,在手动填写这些字段后,结果字段必须向我显示这 4 个字段的串联,格式如下empresa-proveesoli_cant-dest-anho

一个接一个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是 aRequest for Quotation或 a ,则用于过滤Purchase Order

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

4

1 回答 1

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

于 2013-08-03T01:15:38.670 回答