Odoo 14 Бинарное поле внутри hr.employee.public

У меня проблема с моделью 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...

Где я ошибаюсь? В чем может быть проблема?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
125
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

store=True не требуется, потому что attachment=True Odoo сообщит, что эти файлы будут сохранены как вложения, что в любом случае является еще одним видом их хранения.

И я думаю, что это все. Поскольку для него установлено значение store=True, Odoo считает, что его необходимо загрузить из соответствующей таблицы в базе данных. Но attachment=True может вообще предотвратить его создание в базе данных.

Итак, вы используете противоречивые параметры поля. Либо используйте хранилище, либо вложение, но не то и другое одновременно (что касается двоичных полей).

Это ничего не меняет, у меня всегда одна и та же ошибка.

oigna 19.04.2024 15:05

Вы потом обновили свой модуль?

CZoellner 19.04.2024 17:01

Да, конечно. Я также запустил odoo с -u my_module -d my_db. Но ничего.

oigna 19.04.2024 17:12

Хм, тогда понятия не имею :-(

CZoellner 19.04.2024 17:15
Ответ принят как подходящий

Если вы наследуете 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] час: Представьте профиль государственного служащего совершить

Огромное спасибо, это частично решило мою проблему.

oigna 22.04.2024 10:50

Другие вопросы по теме