Связанные поля - это очень простые вычисляемые поля. Настолько простыми они могут быть "реализованы" с одним параметром в определении поля. У Odoo есть обобщенные c методы для этих полей. Например, многие разработчики не пишут обратные методы для вычисляемых полей, которые обращают метод вычисления, потому что они просто не нужны. Но без него и без сохранения вычисленного поля Odoo устанавливает поле только для чтения.
Связанные поля имеют общий c обратный метод. В вашем случае, изменив building_id
, когда уже был выбран floor_id
, Odoo напишет building_id
на этом floor_id.building_id
, потому что именно так работают связанные поля (я знаю, что это не лучшее объяснение).
Пользователь явно не имеет прав на запись / обновление для модели builiding.floor
, и поэтому в конце будет сообщение об ошибке доступа, потому что Odoo хочет написать новое здание на этаже.
Кажется, Я хочу, чтобы вы фильтровали полы по зданиям, но вам не следует использовать для этого соответствующее поле. Просто поместите домен на floor_id
, который фильтрует по выбранному building_id
:
floor_id = fields.Many2one('building.floor', domain="[('building_id', '=?', building_id)]")
Вы также можете использовать оператор домена =
, но =?
покажет все этажи, когда здание еще не было установлено .