Odoo 在 One2Many 字段中获取选定的用户 ID

Odoo get the selected user id in One2Many field

大家好,我是 Odoo 的新手,现在我有 2 个模型如下:

class HumanResource(models.Model):
# _name = 'hr.employee'
_inherit = 'hr.employee'

food_ids = fields.One2many(
    'hr.employee.food',
    'food_id',
    string='Food Cost'
)


class HrFood(models.Model):
_name = "hr.employee.food"
_description = "Food"

food_id = fields.Many2one('hr.employee', string='Food', default=lambda self: self.env['hr.employee'].id)
# food_id = fields.Many2one('hr.employee', 'Food')
# foodtype = ?to?
food_name = fields.Char(
    string='Food Name',
    help='Please Enter the Food Name'
)

food_category = fields.Selection(
    [('breakfast', 'Breakfast'),
     ('lunch', 'Lunch'),
     ('teatime', 'Tea Time'),
     ('dinner', 'Dinner'),
     ('supper', 'Supper')],
    string='Category',
)
food_cost = fields.Float(
    string='Food Amount',
    digits=(5, 2)
)

我正在继承我在 "Apps" 中安装的现有 hr.employee 模型。

下面是继承视图。 enter image description here

然后我想要的是当我点击"Add an Item"时,它会自动将我有select的员工ID填入HrFoodfood_id(Many2one字段)class.

这是当前结果,我圈出的字段是我想将默认值设置为我 select 编辑的员工的字段。 enter image description here

请帮我解决我的问题,我是Odoo的新手。 我的 Odoo 版本是 Odoo 11, 提前致谢。

您可以在 HrFood class 中添加一个 default_get 方法来获取当前选择的员工 ID。

在您的 XML 字段中添加以下行:

<field name='food_ids'  context="{'default_active_id': active_id}"></field>

然后在Python中添加HrFood中的函数Class

 @api.model
 def default_get(self, fields):
     res = super(HrFood, self).default_get(fields)
     if self.env.context.get('default_active_id'):
        food_id = self.env.context.get('default_active_id')
     return res.update({'food_id': food_id})

您无需填写字段 food_id,因为 Odoo 会为您处理。只需将该字段设置为不可见,这样用户就不用费心填写它了。

一些建议:

  1. food_id重命名为employee_id,因为这个属性后面其实还有一个员工。
  2. 在您的员工表单视图中为您的食物条目定义一个可编辑的树视图。对于这 3 列,食品条目的表单视图太多了。

我用过这个

使用方法:fields_view_get.

当我在树视图中选择一行时,它会打开弹出窗口,上下文中是父模型 ID,而不是所选行的模型 ID。

我认为原因是因为记录数据在调用 fields_view_get 之后填充到选定的行模型。