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 会为您处理。只需将该字段设置为不可见,这样用户就不用费心填写它了。
一些建议:
- 将
food_id
重命名为employee_id
,因为这个属性后面其实还有一个员工。
- 在您的员工表单视图中为您的食物条目定义一个可编辑的树视图。对于这 3 列,食品条目的表单视图太多了。
我用过这个
使用方法:fields_view_get.
当我在树视图中选择一行时,它会打开弹出窗口,上下文中是父模型 ID,而不是所选行的模型 ID。
我认为原因是因为记录数据在调用 fields_view_get 之后填充到选定的行模型。
大家好,我是 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 会为您处理。只需将该字段设置为不可见,这样用户就不用费心填写它了。
一些建议:
- 将
food_id
重命名为employee_id
,因为这个属性后面其实还有一个员工。 - 在您的员工表单视图中为您的食物条目定义一个可编辑的树视图。对于这 3 列,食品条目的表单视图太多了。
我用过这个
使用方法:fields_view_get.
当我在树视图中选择一行时,它会打开弹出窗口,上下文中是父模型 ID,而不是所选行的模型 ID。
我认为原因是因为记录数据在调用 fields_view_get 之后填充到选定的行模型。