У меня проблема с моделью hr.employee.public
. Если я попытаюсь добавить новое поле Char, Integer, Many2one и т. д., у меня не возникнет проблем.
Однако, если я попытаюсь вставить двоичное поле вот так employee_signature = fields.Binary(string='Employee signature', attachment=True, store=True)
, я всегда получаю следующую ошибку:
psycopg2.errors.UndefinedColumn: column emp.employee_signature does not exist
LINE 3: ...l,emp.priv_email,emp.employee_file_name_signature,emp.employ...
Где я ошибаюсь? В чем может быть проблема?
store=True
не требуется, потому что attachment=True
Odoo сообщит, что эти файлы будут сохранены как вложения, что в любом случае является еще одним видом их хранения.
И я думаю, что это все. Поскольку для него установлено значение store=True
, Odoo считает, что его необходимо загрузить из соответствующей таблицы в базе данных. Но attachment=True
может вообще предотвратить его создание в базе данных.
Итак, вы используете противоречивые параметры поля. Либо используйте хранилище, либо вложение, но не то и другое одновременно (что касается двоичных полей).
Вы потом обновили свой модуль?
Да, конечно. Я также запустил odoo с -u my_module -d my_db. Но ничего.
Хм, тогда понятия не имею :-(
Если вы наследуете hr.employee.public
для добавления сохраненного поля (а не x2many
полей), вы должны увидеть то же сообщение об ошибке из-за функции init, которая пытается получить поля из hr.employee
Вам не нужно устанавливать атрибут store
на True
, поскольку это значение по умолчанию (если вы установите для store
значение False
, вы не сможете сохранить вложение).
Когда для атрибута attachment
установлено значение True
(значение по умолчанию), Odoo установит для типа столбца поля значение Нет и проигнорирует обновление схемы базы данных
Чтобы устранить эту проблему, вы можете использовать ту же логику, что и поле image_1920 (которое является расширенным полем Binary
), и добавить поле в модель hr.employee
.
Пример:
class HrEmployee(models.Model):
_inherit = 'hr.employee'
employee_signature = fields.Binary(string='Employee signature')
class HREmployeePublic(models.Model):
_inherit = "hr.employee.public"
employee_signature = fields.Binary(compute = "_compute_employee_signature", compute_sudo=True)
def _compute_employee_signature(self):
for employee in self:
employee_id = self.sudo().env['hr.employee'].browse(employee.id)
employee.employee_signature = employee_id.employee_signature
В приведенном выше примере для атрибута прикрепления подписи сотрудника установлено значение True
, и Odoo не будет создавать столбец в таблице сотрудников. Это не проблема, поскольку то же поле в общедоступном профиле является несохраняемым вычисляемым полем, поэтому Odoo не будет пытаться. чтобы получить поле из таблицы сотрудников
Подробности смотрите [IMP] час: Представьте профиль государственного служащего совершить
Огромное спасибо, это частично решило мою проблему.
Это ничего не меняет, у меня всегда одна и та же ошибка.