ODOO:在其他型号上获取字段名称,并将其作为选择



我想在另一个模型中的选择字段中获取模型中的字段名称。有可能吗?

class ExportEmplWizard(models.TransientModel):
    _name = 'hr.empl.exp.wizard'
    empl_ids = fields.Many2many('hr.employee', string="Karyawan")
    hr_field = fields.Selection(hr_field_choice, string="Pilih Kolom")

    def empl_to_exp(self):
        fields = self.env['hr.employee'].fields_get()
        hr_field_choices = []
        for key, val in fields.items():
            choice = (key, val['string'])
            hr_field_choices.append(choice)

我正在尝试使用:

在其他型号上获取字段名称
sel.self.env['hr.employee'].fields_get()

问题是,我不知道如何将其作为选择选项(实际上选择)。

谢谢您的帮助。

根据fields.Selection()

的DocString

:参数选择:指定此字段的可能值。 它作为对列表(valuestring)或 模型方法或方法名称。

基本上,selection参数应像compute参数一样工作。fields.Selection.get_values()的代码确认了这一点。

因此,您应该尝试这样的事情:

hr_field = fields.Selection(selection='empl_to_exp', string="Pilih Kolom")
def empl_to_exp(self):
    fields = self.env['hr.employee'].fields_get()
    return [(k, v['string']) for k, v in fields.items()]

您可能需要/想要使用getattr(v, 'string', 'DEFAULT_VALUE')而不是简单地使用v['string']。字段应该始终有一个字符串。

def get_selection_name(env, model, field, value):
    return dict(env[model].fields_get(field, 'selection').get(field, {}).get('selection',{})).get(value)
# usage
get_selection_name(request.env, 'sale.order', 'general_status', 'draft')  # 'Draft'
get_selection_name(self.env, 'sale.order', 'general_status', 'draft')     # 'Draft'

我使用此!

最新更新