【问题标题】:Odoo get the selected user id in One2Many fieldOdoo 在 One2Many 字段中获取选定的用户 ID
【发布时间】:2018-07-10 04:59:26
【问题描述】:

大家好,我是 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 的新手。 我的 Odoo 版本是 Odoo 11, 提前致谢。

【问题讨论】:

    标签: python odoo odoo-11


    【解决方案1】:

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

    一些建议:

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

    【讨论】:

    • 我会接受建议,这对我有用,非常感谢您
    【解决方案2】:

    您可以在 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})
    

    【讨论】:

    • 您好 sfx,感谢您的回复。我应该将该方法添加到 HrFood 类还是 HumanResource 类中?我已将其修改为 @api.model def default_get(self, fields): res = super(HrFood, self).default_get(fields) if self.env.context.get('id'): food_id = self.env .context.get('id') return res.update({'food_id': food_id}) 因为我想获取员工 ID,所以我尝试将其添加到他们两个中,也是两个类中的一个。但他们都没有返回预期的结果。感谢您的耐心等待
    • 基本上,我将 'active_id' 更改为 'id',很抱歉第一次在 StackOverflow 发表评论。
    • 不,我应该在哪个类中添加 default_get 方法?我试过 self.env.context.get('active_id') 和 self.env.context.get('id')。这两个都不行。
    • 嗨 sfx,我试图覆盖 XML 文件以向字段添加上下文。但我不能覆盖它,你能看看这个问题吗? stackoverflow.com/questions/51260801/…
    【解决方案3】:

    我用过这个

    使用方法:fields_view_get。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多