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

时间:2018-07-10 04:59:27

标签: python odoo odoo-11

嗨,我是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)
)

我继承了我在“应用程序”中安装的现有hr.employee模型。

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

然后,当我单击“添加项目”时,它会自动将我选择的员工ID填写到HrFood类的food_id(Many2one字段)中。

这是当前结果,我向上圈出的字段是我想要将默认值设置为我选择的员工的字段。 enter image description here

请帮助我解决我的问题,我是Odoo的newbee。 我的Odoo版本是Odoo 11 预先感谢。

3 个答案:

答案 0 :(得分:1)

您可以在HrFood类中添加default_get方法,以获取所选的当前员工ID。

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

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

然后在Python中将函数添加到HrFood类中

 @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})

答案 1 :(得分:1)

您不需要填写字段food_id,因为Odoo会为您处理。只需使该字段不可见,使用户不必费心填充它。

一些建议:

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

答案 2 :(得分:0)

我用过这个

使用方法:fields_view_get。

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

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