Openerp 连接ODOOV9上的字段

Openerp 连接ODOOV9上的字段,openerp,odoo-9,Openerp,Odoo 9,我正在尝试连接3个字段以形成一个内部代码,并将其显示在视图中: 我有3种型号: 类别(大小=2) 产品(尺寸=4) 系列(尺寸=3) 我想以这样的形式显示它 产品代码:CAT-PROD-001 我不知道我是否必须使用一个计算字段,或者是否存在其他方法来实现这一点,因为我正在使用计算字段进行测试,但无法达到所需的输出 编辑: 现在我尝试使用一个带有onchange函数的计算字段来生成字段上的值 型号 # -*- coding:utf-8 -*- from openerp import mode

我正在尝试连接3个字段以形成一个内部代码,并将其显示在视图中:

我有3种型号:

  • 类别(大小=2)
  • 产品(尺寸=4)
  • 系列(尺寸=3)
我想以这样的形式显示它

产品代码:CAT-PROD-001

我不知道我是否必须使用一个计算字段,或者是否存在其他方法来实现这一点,因为我正在使用计算字段进行测试,但无法达到所需的输出

编辑:

现在我尝试使用一个带有onchange函数的计算字段来生成字段上的值

型号

# -*- coding:utf-8 -*-
from openerp import models,fields,api
class exec_modl(models.Model):
        _name           =   "exec.modl"
        _rec_name       =   "exec_desc"
        exec_code       =   fields.Char('Identificador',required=True,size=3)
        exec_desc       =   fields.Char('Descripción',required=True)
        cour_exec       =   fields.Many2one('cour.modl')
        proc_exec       =   fields.Many2one('enro.modl')
        inte_code       =   fields.Char(compute='_onchange_proc')
功能

  @api.onchange('proc_exec')
    def _onchange_proc(self):
        cate    =   "XX"
        cour    =   "XXXX"
        exet    =   "XXX"
        output  =   cate+"-"+cour+"-"+exet
        return output
我只是尝试使用普通值,只是想知道如何将其发送到字段

编辑2:

使用@Charif的答案,我可以在表单上打印静态字符串,但我试图达到的下一个里程碑是将代码(外部模型字段)放入inte_代码的板条箱中

例如:从模型cour.modl中,我想从字段cour\u code(课程的内部id)中获取与第一个模型上的cour\u exec字段相对应的值(cour\u exec字段具有cour.modl模型中的课程描述)

E@api.dependens('inte_code')) 定义更改过程(自): cate=“XX” #第一个域使用元组不是列表 cour_result=self.env['cour.modl'].search([('id','=',exec_modl.cour_exec)]).cour_代码 cour=”“#空字符串,因为不能用字符串值连接None或False #如果结果是: #cour=“,”.join(cour_result.ids中crse_代码的crse_代码) #其他: #打印“搜索结果为空检查您的域” exet=“XXX” 输出=cate+“-”+cour+“-”+exet+“-”+cour\u结果 self.inte_代码=输出

编辑3

我一直试图使用搜索模式调用其他模型值,但我有控制台输出:

无法调整类型“manyOne”,似乎我正在尝试比较两种不同类型的字段,这些类型可以在odoo上解析?或者我对搜索方法使用了错误的语法

   @api.depends('inte_code')
    def _onchange_proc(self):
        cate    =   "XX"
        # first domain use tuple not list
        cour_result    = self.env['cour.modl'].search([('id','=',exec_modl.cour_exec)]).cour_code

        exet    =   "XXX"
        output  =   cate+"-"+cour+"-"+exet+"-"+cour_result
        self.inte_code = output
编辑4:回答 我终于达到了预期的输出使用以下代码:

@api.depends('inte_code')
        def _onchange_proc(self):
            cate_result    = self.cate_exec
            proc_result    =    self.env['enro.modl'].search([('id','=',str(self.proc_exec.id))]).enro_code
            cour_result    =    self.env['cour.modl'].search([('id','=',str(self.cour_exec.id))]).cour_code
            output  =   str(proc_result)+"-"+str(cate_result)+"-"+str(cour_result)+"-"+self.exec_code
            self.inte_code = output
此外,我还添加了一个相关字段,用于将课程类别添加到最终输出中

cate_exec       =   fields.Char(related='cour_exec.cour_cate.cate_code')
现在,输出具有以下结构:

内部过程ID-CAT过程执行代码

例:xxxxxxxx-xx-xxxx-xxx


您可以创建新向导

从向导中,您可以生成内部引用

类创建内部参考(models.TransientModel):
_name=“create.internal.reference”
@api.multi
def创建内部参考(自我):
product_obj=self.env['product.product']
active\u id=self.\u context.get('active\u id'))
如果活动的\u ID:
产品=产品对象浏览(活动标识)
products.generate_new_internal_reference()
返回真值
创建视图和动作窗口


创建内部引用
创建.internal.reference
类别产品\u产品(models.Model):
_继承class='product.product'
@api.multi
def生成新的内部参考(自身):
对于产品本身:
如果不是产品内部参考:
product.internal_reference='%s-%s-%s'%(str(product.categ_id.name)[:2],str(product.name)[:4],第三个_字段[:3])
在“更多”按钮下的product.product中,您可以访问此向导并生成内部引用

这可能对你有帮助

  • 首先在计算字段中使用api。不依赖于更改:
  • 其次,compute函数不返回任何内容,但它传递自变量上的记录,因此您所要做的就是将值分配给computed字段
    @api.dependens('proc_exec'))
    定义更改过程(自):
    #计算值
    # ... 
    #然后将其分配给字段
    self.computed_字段=计算的_值
    
    我建议做的一件事是循环self,因为它是记录集,所以如果self包含多个记录,那么前面的代码将引发signlton错误 所以你可以这样做:

    #如果self中每个记录的值相同,则在此计算值
    对于rec in self:
    #计算这里的值,它取决于记录的值
    rec.compute_字段=计算值
    
    或者使用
    api.one
    api.dependents

    @api.one
    @依赖于('field1','field2',…)
    
    编辑:

    @api.dependens('proc_exec'))
    定义更改过程(自):
    cate=“XX”
    #第一个域使用元组不是列表
    cour_result=self.env['cour.modl'].search([('cour_desc','=',self.cour_exec)])
    cour=”“#空字符串,因为不能用字符串值连接None或False
    如果结果是:
    cour=“,”.join(cour_result.ids中id的id)
    其他:
    打印“搜索结果为空检查您的域”
    exet=“XXX”
    输出=cate+“-”+cour+“-”+exet
    self.inte_代码=输出
    

    试试这段代码我认为搜索的结果是一个记录集,这样你就可以通过名称\u of_record\u set.ids获得ID列表,然后从ID列表中创建一个字符串来连接它。尝试并让我知道是否有错误,因为我使用的是work PC,我手上没有odoo^

    是这个字段中的一个,如果不是,那么使用compute字段我已经添加了一些本地测试的代码,这些代码非常复杂,不仅仅是使用计算字段?你也可以使用计算字段,但在计算字段中,每个测试都会使用计算字段
    cate_exec       =   fields.Char(related='cour_exec.cour_cate.cate_code')