0

i want to link 2 models of 2 diffrent addons i put one of them in the depends listin the manifest file but i had an error:

here is the code:

class Employee(models.Model):
    _name = 'prof.zaouia.employee'

  
    image = fields.Binary()
    name = fields.Char(string='Nom', required=True)
    prenom = fields.Char(string='Prénom', required=True)
    charge = fields.Integer(string='personnes à charge', required=True)
    situation = fields.Selection([('M', 'M'), ('C', 'C')], default='M')
    nombre_jours = fields.Integer(string='nombre de jours travaillés', default=26)
    periode = fields.Date(string='salaire au', default=fields.Date.today())
    nationality = fields.Many2one(string='Nationalité', comodel_name='prof.zaouia.nationality')
    salaire_brutm = fields.Float(string='Salaire brut mensuel')
    salaire_bdu = fields.Float(string='Salaire brut dû', compute='_compute_salaire_bdu', store=True)
    specializations = fields.Many2one(string='Métier', comodel_name='prof.zaouia.specialization')
    reservation_id = fields.Many2one(comodel_name="roombooking", string="responsable for")


class RoomBooking(models.Model):
    _name = "roombooking"
    booking_id = fields.Integer("booking_ID")
    checkInDate = fields.Date("check_in")
    checkoutDate = fields.Date("check_out")
    payement_status = fields.Boolean("payement_status")
    totale_amount = fields.Float("total")
    rooms = fields.One2many("room", "roombooking_id", string="rooms")
    client_id = fields.Many2one("client", string="client")
    responsables = fields.One2many(comodel_name = "prof.zaouia.employee", inverse_name = "reservation_id", String="responsables")

here is the error:

RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
  File "C:\Users\hossa\odoo\odoo\http.py", line 1584, in _serve_db
    return service_model.retrying(self._serve_ir_http, self.env)
  File "C:\Users\hossa\odoo\odoo\service\model.py", line 134, in retrying
    result = func()
  File "C:\Users\hossa\odoo\odoo\http.py", line 1611, in _serve_ir_http
    response = self.dispatcher.dispatch(rule.endpoint, args)
  File "C:\Users\hossa\odoo\odoo\http.py", line 1808, in dispatch
    result = self.request.registry['ir.http']._dispatch(endpoint)
  File "C:\Users\hossa\odoo\odoo\addons\base\models\ir_http.py", line 149, in _dispatch
    result = endpoint(**request.params)
  File "C:\Users\hossa\odoo\odoo\http.py", line 699, in route_wrapper
    result = endpoint(self, *args, **params_ok)
  File "c:\users\hossa\odoo\addons\web\controllers\dataset.py", line 42, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "c:\users\hossa\odoo\addons\web\controllers\dataset.py", line 33, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "C:\Users\hossa\odoo\odoo\api.py", line 461, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "C:\Users\hossa\odoo\odoo\api.py", line 448, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "C:\Users\hossa\odoo\odoo\models.py", line 6475, in onchange
    record._update_cache(changed_values, validate=False)
  File "C:\Users\hossa\odoo\odoo\models.py", line 5274, in _update_cache
    value = field.convert_to_cache(value, self, validate)
  File "C:\Users\hossa\odoo\odoo\fields.py", line 2965, in convert_to_cache
    id_ = comodel.new(value, origin=origin).id
  File "C:\Users\hossa\odoo\odoo\models.py", line 5665, in new
    origin = origin.id
AttributeError: '_unknown' object has no attribute 'id'

The above server error caused the following client error:
null

i tries to add the other addons in the the other depends list on the manifest file but i hade an error i tryed to add an id attribute but it didn't work too

1 Answers1

0

That won't work with both modules using each others model with only one depending on the other. Instead just build up the one2many relation in one module with one dependency extending the others modules model, for example extending model prof.zaouia.employee:

class RoomBooking(models.Model):
    _name = "roombooking"

    booking_id = fields.Integer("booking_ID")
    checkInDate = fields.Date("check_in")
    checkoutDate = fields.Date("check_out")
    payement_status = fields.Boolean("payement_status")
    totale_amount = fields.Float("total")
    rooms = fields.One2many("room", "roombooking_id", string="rooms")
    client_id = fields.Many2one("client", string="client")
    responsables = fields.One2many(comodel_name = "prof.zaouia.employee", inverse_name = "reservation_id", String="responsables")

class Employee(models.Model):
    _inherit = 'prof.zaouia.employee'

    reservation_id = fields.Many2one(comodel_name="roombooking", string="responsable for")

So assuming model prof.zaouia.employee belongs to module1 and roombooking to module2, than my code example is in module2 and module2 depends on module1.

CZoellner
  • 13,553
  • 3
  • 25
  • 38
  • i already tried that, but when i try this i don't see the data of prof.zaouia.employee class in my relation but only a new instance of the class. for example when i click add an employee to my roombooking class i don't get the employees that exist in prof.zaouia.employee but they give me the form to make a new employee. – Hossam Benhammou May 04 '23 at 12:26
  • Then you have to use a many2many relation instead. – CZoellner May 04 '23 at 13:01
  • okey i get it now that was the problem from the begining, i changed it to many2many relation and now i can chose employees but the the problem is that i can chose only from the ones that i made in the roombooking module, so i change my code back as it was by doing the relation between the addons without extending any class and it works. thanks for the help!! – Hossam Benhammou May 04 '23 at 13:26