Многие поля во многих наследованиях используют ту же таблицу и столбцы при наследовании с полем _name Odoo13 - PullRequest
1 голос
/ 30 января 2020

Эта ошибка возникает, когда "hr.employee" или любая другая модель с полем Many2many наследуется моей модели в odoo13.

Traceback (most recent call last):


File "/opt/odoo/odoo/modules/registry.py", line 59, in __new__
        return cls.registries[db_name]
      File "/opt/odoo/odoo/tools/func.py", line 69, in wrapper
        return func(self, *args, **kwargs)
      File "/opt/odoo/odoo/tools/lru.py", line 44, in __getitem__
        a = self.d[obj].me
    KeyError: 'shorepoint'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/opt/odoo/odoo/modules/registry.py", line 85, in new
        odoo.modules.load_modules(registry._db, force_demo, status, update_module)
      File "/opt/odoo/odoo/modules/loading.py", line 423, in load_modules
        registry.setup_models(cr)
      File "/opt/odoo/odoo/modules/registry.py", line 247, in setup_models
        model._setup_fields()
      File "/opt/odoo/odoo/models.py", line 2684, in _setup_fields
        field.setup_full(self)
      File "/opt/odoo/odoo/fields.py", line 418, in setup_full
        self._setup_regular_full(model)
      File "/opt/odoo/odoo/fields.py", line 3151, in _setup_regular_full
        raise TypeError(msg % (self, field))
    TypeError: Many2many fields school.student.category_ids and hr.employee.category_ids use the same table and columns

Вот мой код:

from odoo import models, fields, api

class school_management(models.Model):
    _name = 'school.student'
    _inherit = 'hr.employee'
    _description = 'Model to manage school students'

1 Ответ

0 голосов
/ 30 января 2020

В hr приложении поле category_ids было определено так:

    category_ids = fields.Many2many(
          'hr.employee.category', 'employee_category_rel',
          'emp_id', 'category_id',
          string='Tags')

они указали имя relation и columns, поэтому, когда он унаследовал hr.employee в вашем пользовательском В модели используется то же определение category_ids, что и для вашей модели, поэтому Odoo смущен: вы использовали те же relation и columns, чтобы определить many2many relation для двух разных моделей . все, что вам нужно сделать, это удалить эту двусмысленность , указав новое имя отношения для вас many2many поле.

class school_management(models.Model):
    _name = 'school.student'
    _inherit = 'hr.employee'
    _description = 'student' # this will be used to log message when you create a student, so keep it simple, when you create a record message will be 'student is created' 

    # define new relation name and better column names 
    # and I think you need a new category model because this one is used for employee category, may be it's better to create hr.student.category table I don't know it's up to you
    category_ids = fields.Many2many(
      'hr.employee.category', 'student_category_rel',
      'student_id', 'category_id',
      string='Tags')

Надеюсь, это поможет вам.

...