У меня есть odoo 12 с модулем «Управление контрактами — повторяющиеся», и я пишу модуль, который создает модель под названием «аренда», которая наследуется от account.analytic.account с использованием _inherit. Представление формы наследуется от contract.account_analytic_account_sale_form. Это работает очень хорошо, за исключением того, что когда я пытаюсь добавить продукты из строк счета-фактуры, я получаю сообщение об ошибке
TypeError: Mixing apples and oranges: account.analytic.account(<odoo.models.NewId object at 0x07736650>,) & pmtest.leases(<odoo.models.NewId object at 0x07736650>,)
Модель:
class leases(models.Model):
_name = 'pmtest.leases'
_description = 'Leases - inherit from Contracts'
_inherit = 'account.analytic.account'
lease
имя = поля.Char()
Вид
<record id = "pmtest_leases_form" model = "ir.ui.view">
<field name = "name">pmtest.leases.form</field>
<field name = "model">pmtest.leases</field>
<field name = "inherit_id" ref = "contract.account_analytic_account_sale_form"/>
<field name = "mode">primary</field>
<field name = "priority" eval = "20"/>
<field name = "arch" type = "xml">
<xpath expr = "//field[@name='partner_id']" position = "after">
<field name = "leasename" string = "Lease Name"/>
</xpath>
</field>
</record>
полная трассировка стека:
Odoo Server Error
Traceback (most recent call last):
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 654, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 312, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\tools\pycompat.py", line 87, in reraise
raise value
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 696, in dispatch
result = self._call_function(**self.params)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 344, in _call_function
return checked_call(self.db, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\service\model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 337, in checked_call
result = self.endpoint(*a, **kw)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 939, in __call__
return self.method(*args, **kw)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\http.py", line 517, in response_wrap
response = f(*args, **kw)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 962, in call_kw
return self._call_kw(model, method, args, kwargs)
File "c:\program files (x86)\odoo 12.0\server\odoo\addons\web\controllers\main.py", line 954, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 749, in call_kw
return _call_kw_multi(method, model, args, kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\api.py", line 736, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 5455, in onchange
record[name] = value
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 5097, in __setitem__
return self._fields[key].__set__(self, value)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1002, in __set__
spec = self.modified_draft(record)
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1147, in modified_draft
lambda rec: rec if path == 'id' else rec._mapped_cache(path) & records
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 4866, in filtered
return self.browse([rec.id for rec in self if func(rec)])
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 4866, in <listcomp>
return self.browse([rec.id for rec in self if func(rec)])
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1147, in <lambda>
lambda rec: rec if path == 'id' else rec._mapped_cache(path) & records
File "C:\Program Files (x86)\Odoo 12.0\server\odoo\models.py", line 5002, in __and__
raise TypeError("Mixing apples and oranges: %s & %s" % (self, other))
TypeError: Mixing apples and oranges: account.analytic.account(<odoo.models.NewId object at 0x04F49BB0>,) & pmtest.leases(<odoo.models.NewId object at 0x04F49BB0>,)





Думаю проблема в атрибуте _имя.
Попробуйте удалять атрибут _имя.
Разница в том, что если вы добавите _имя, вы получите создать новую таблицу в базе данных. Если вы добавляете только атрибут _наследовать, поля, которые вы создаете будет добавлено в таблицу, называются как атрибут _inherit.
Если вы видите, ошибка говорит о том, что вы не можете сравнивать модель account.analytic.account с моделью pmtest.leases, потому что вы определяете с помощью _name, что это разные модели.
Зависит от того, что пытается сделать ОП. Его/ее вопрос звучит так, будто он/она хочет создать совершенно новую модель. За исключением этого, это хороший ответ!
Действительно, я пытался создать новую модель. Тем не менее, это работает для расширения модели контрактов, и я могу заставить это работать. Спасибо!
Эта ошибка возникает, когда вы назначаете поле
many2oneзапись из другой модели. например, сделатьrec.product_id = some_rec.lot_idизTraceBackЯ считаю, что проблема в каком-тоonchageвызове метода.