odoo는 동적으로 필드를 생성합니다.

테스트 테이블에는 모델과 직접 관련된 필드가 있지만 테스트 테이블에서는 선택한 모델이 모델에 해당하는 필드를 만들어야합니다. 직접
사용할 필드를 생성하므로 동적 필드 생성을 사용합니다.
유사 :
res.users를 선택하여 x_res_users_id 필드를 생성
하십시오. account.move를 선택 하여이 필드 를 생성하는
것과 유사한 x_account_move_id 필드 를 생성하십시오. 존재하는 경우 생성하지 마십시오.

    def dynamic_field(self, dimension_ids):
        """ 动态创建字段
        self._name: 传过来的模型(要在那个模型里面创建字段)
        fields_name :生成字段,类似 x_res_users_id
       """
        for rec in dimension_ids:
            model = self.env['ir.model']._get(self._name)
            fields_name = 'x_%s_id' % (rec.dimension_id.model_id.model.replace('.', '_'))
            if fields_name not in self:
                new_field = self.env['ir.model.fields'].create({
                    'model_id': model.id,  
                    'name': fields_name, 
                    'field_description': rec.dimension_id.model_id.name,   
                    'ttype': 'many2one',
                    'relation': rec.dimension_id.model_id.model,
                })

#model_id 在此模型创建字段
#name 字段名称
#field_description 字段描述
#ttype 字段类型
#relation ttype 关联的模型,

추천

출처blog.csdn.net/weixin_42464956/article/details/108213874