2016-08-30 1 views
1

Я добавляю поле к модели из пользовательского модуля в редакторе Odoov9 Community.Модуль не имеет отношения к many2one - сообщество Odoo v9

Как это:

import logging 
from openerp import api, fields, models, _ 
from openerp.exceptions import UserError, ValidationError 
from openerp.tools.safe_eval import safe_eval as eval 

class refund(models.Model): 

"""Inherits account.invoice.refund and adds journal_id field""" 
    _name = "account.invoice.refund" 
    _inherit = "account.invoice.refund" 

    _columns = { 
     'journal_id': fields.many2one('account.journal', 'Refund Journal', help='You can select here the journal to use for the credit note that will be created. If you leave that field empty, it will use the same journal as the current invoice.'), 
} 

Но когда сервер загружает, он выдает мне эту ошибку:

2016-08-30 00:04:41,807 12893 CRITICAL odoov9_ openerp.modules.module: Couldn't load module debit_credit_note 
2016-08-30 00:04:41,807 12893 CRITICAL odoov9_ openerp.modules.module: 'module' object has no attribute 'many2one' 
2016-08-30 00:04:41,808 12893 ERROR odoov9_ openerp.modules.registry: Failed to load registry 
Traceback (most recent call last): 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/registry.py", line 386, in new 
openerp.modules.load_modules(registry._db, force_demo, status, update_module) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/loading.py", line 334, in load_modules 
force, status, report, loaded_modules, update_module) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/loading.py", line 237, in load_marked_modules 
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/loading.py", line 123, in load_module_graph 
load_openerp_module(package.name) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/module.py", line 324, in load_openerp_module 
__import__('openerp.addons.' + module_name) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/modules/module.py", line 61, in load_module 
mod = imp.load_module('openerp.addons.' + module_part, f, path, descr) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/debit_credit_note/__init__.py", line 31, in <module> 
import models 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/debit_credit_note/models/__init__.py", line 1, in <module> 
import debit_credit 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/debit_credit_note/models/debit_credit.py", line 27, in <module> 
class refund(models.Model): 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/debit_credit_note/models/debit_credit.py", line 36, in refund 
'journal_id': fields.many2one('account.journal', 'Refund Journal', help='You can select here the journal to use for the credit note that will be created. If you leave that field empty, it will use the same journal as the current invoice.'), 
AttributeError: 'module' object has no attribute 'many2one' 

Кто-нибудь может пролить свет на это?

Я очень смущен этим, никогда не имел этой ошибки раньше.

+1

Похоже, что это может быть проблема чувствительности к регистру: https://www.odoo.com/documentation/8.0/reference/orm.html#openerp.fields.Many2one 'Many2one' должен иметь« M »с заглавной буквы. – darthbith

+0

Большое спасибо, все еще привык к v7, lol, но теперь у меня есть еще одна ошибка, RuntimeError: максимальная глубина рекурсии превышена при вызове объекта Python, lol, думаю, я должен открыть еще один вопрос для этого ... Спасибо – NeoVe

ответ

2

Если вы являетесь наследованием от уже определенного модуля, вам не нужно определять переменную _name, просто будет определена переменная _inherit.

Вы получили сообщение об ошибке «Module has not attrbiute many2one», поскольку вы импортировали fields для нового api, но определяли его старый способ api. Максимальная ошибка рекурсии также должна быть решена, если вы напишете код в новом api.

Если вы пишете этот модуль для Odoo 9, было бы неплохо написать его в новом api. Ниже ваш код, написанный с новым API:

import logging 
from openerp import api, fields, models, _ 
from openerp.exceptions import UserError, ValidationError 
from openerp.tools.safe_eval import safe_eval as eval 

class refund(models.Model): 
_inherit = "account.invoice.refund" 

journal_id = fields.Many2one('account.journal', string='Refund Journal', help='You can select here the journal to use for the credit note that will be created. If you leave that field empty, it will use the same journal as the current invoice.') 

выше кусок кода должен работать без каких-либо проблем.

+1

не проблема с определением '_name', тоже. Но ваш ответ правильный, это должно быть сделано в новом стиле api. – CZoellner

 Смежные вопросы

  • Нет связанных вопросов^_^