如何在 odoo 9 中为 many2one 字段设置默认值?

How can I set default value for a many2one field in odoo 9?

我是 Odoo-9.0c 系统的新手,尝试做一些改变来支持这项工作。但是我不知道如何给many2one字段((selection type)设置具体的值。该字段也是通过自定义模块创建的。解决这种问题的正确方法是什么?

如果您想使用一些动态的东西,您可以定义一个函数来为您的记录中的字段设置默认值。在您的函数中,您需要识别相关模型上记录的 ID,并将字段的值分配给该 ID。

@api.multi
def _get_field_name_default(self):
    related_model_id = self.env['related.model'].search([<YOUR DOMAIN HERE>]).id
    return related_model_id

field_name_id = fields.Many2one('model.name', string="Field Title", default=_get_field_name_default)

如果期望此值始终相同并且您已经知道相关模型中记录的 ID,那么您可以静态分配它。

field_name_id = fields.Many2one('model.name', string="Field Title", default=1)

如果您的相关模型上的记录已被删除,最好使用能够返回 False 或 None 的函数。

使用新的 api,只需指定要更改的字段属性:

field_name = fields.Many2one(default=a_function)

来自Odoo new api guide line

Field inheritance

One of the new features of the API is to be able to change only one attribute of the field:

name = fields.Char(string='New Value')

...

Fields Defaults

Default is now a keyword of a field:

You can attribute it a value or a function

name = fields.Char(default='A name')

or

name = fields.Char(default=a_fun)

...

def a_fun(self):  
    return self.do_something()

您可以使用 lambda 设置默认值:

type = fields.Many2one('your.model',"String to display", default=lambda self: self.env['your.model'].search([('name','=','value you need to set as default')]))