首页 > 解决方案 > 创建记录时获取当前用户。奥多 14

问题描述

我在销售点有一个与 res.users 的字段 many2one 关系,如下所示:

  user_id = fields.Many2one(
        comodel_name='res.users', string='Responsible',
        help="Person who uses the cash register. It can be a reliever, a student or an interim employee.",
        default=lambda self: self.env.uid,
        states={'done': [('readonly', True)], 'invoiced': [('readonly', True)]},
    )

<field string="User" name="user_id"/>

我想将其设置为“必填”和空字段,但是在保存记录时,如果“user_id”的值为空,则获取当前用户。我尝试使用此代码,但所需的值被阻塞:

@api.model
    def _default_user_id(self):
        if not self.user_id:
            self.user_id = self.env.uid
        else:
            self.user_id = False


    user_id = fields.Many2one(
        comodel_name='res.users',
        required=True,
        help="Person who uses the cash register. It can be a reliever, a student or an interim employee.",
        default=_default_user_id,
        states={'done': [('readonly', True)], 'invoiced': [('readonly', True)]},
    )

我该怎么做 ?谢谢。

标签: javascriptpythonxmlodoo

解决方案


更改默认代码

默认=lambda 自我:self.env.uid,

默认 = lambda 自我:self.env.user,

编辑-1

在这种情况下,我们需要重写create()方法而不是在默认函数中编写逻辑。使用以下代码,它会user_id在创建记录时检查字段,如果记录没有 user_id,它将设置当前登录的用户。

@api.model
def create(self, vals):
    if "user_id" not in vals:
        vals.update({"user_id": self.env.user})
    record = super().create(vals)
    return record

编辑-2

在这种情况下,我们需要写下默认函数。

def _default_user_id(self):
    if not self.user_id:
        return self.env.user
    return False

推荐阅读