Get Current User when creating record . Odoo 14

Viewed 885

I have a field many2one relation to res.users in point of sale like this :

  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"/>

I want to set it 'required' and empty field , but when saving record if the value of 'user_id' was empty , then get the current user. I tried with this code , but required value was blocking:

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

How can I do it ? Thanks.

1 Answers

Change your default code

from

default=lambda self: self.env.uid,

to

default=lambda self: self.env.user,

EDIT-1

In this case, we need to override create() method instead of write logic in default function. With following code, it will check user_id field at the time of record create, if record doesn't have user_id, it will set current logged user.

@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

EDIT-2

In this case, we need to write down default function.

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