Должен ли я записать имя пользователя, который изменяет определенное поле с помощью Odoo?
.py файл: ….
НТБ = fields.Text ()
moifier = fields.Many2one ('res.users', string=”Modifier”)
...
Когда какой-либо пользователь изменяет "namex", его / ее имя должно автоматически записываться в поле "модификатор"; какой код я должен сделать? Я пытаюсь "изменить / зависит", но не получилось; Может быть, модификатор может быть "текстовое поле / поле символа"?
Кроме того, я должен установить "access_rule", чтобы настроить пользователей просто видеть записи, созданные участниками в его / ее собственной группе?
2 ответа
У Odoo уже есть это для вас. Каждая модель имеет те поля, которые автоматически создаются и обновляются каждый раз, когда вы создаете или пишете:
- create_date (datetime): когда создается запись
- create_uid (many2one): пользователь, который создал эту запись
- write_date (datetime): последняя запись обновляется
- write_uid (many2one): последний пользователь обновил эту запись
Перейдите в Настройки> Технические> Структура базы данных> Модели для получения более подробной информации.
Хотя Odoo будет следить за последним пользователем, который изменил запись, модификатор для каждого поля не сохраняется. Я вижу интерес к такой функциональности во многих случаях.
Чтобы сделать это для конкретной модели, одна возможность состоит в том, чтобы переопределить write
метод этой модели. В вашем.py файле вы можете добавить что-то вроде этого:
@api.model
def write(self):
if self.namex in values:
values.update({'modifier': uid})
super().write(cr, uid, ids, values, context)
Другой способ сделать это более гибким способом - использовать декоратор @onchange:
@onchange('your_sensible_field_name'):
def set_modifier(self):
self.modifer = self.env.user
Вы также можете посмотреть на декоратор @depends.