2016-08-30 8 views
1

Ich füge ein Feld zu einem Modell von einem benutzerdefinierten Modul in Odoov9 Community Edition.Modul hat nicht attribute many2one - Odoo v9 community

So:

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.'), 
} 

Aber wenn Server lädt, ist es mir diesen Fehler wirft:

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' 

Anybody Licht in diese kann?

Ich bin sehr verwirrt, hatte nie zuvor diesen Fehler.

+1

Es sieht so aus, als könnte es ein Problem mit der Groß-/Kleinschreibung sein: https://www.odoo.com/documentation/8.0/reference/orm.html#openerp.fields.Many2one 'Many2one' sollte das' M' haben. – darthbith

+0

Vielen Dank, immer noch an v7 gewöhnt, lol, aber jetzt habe ich einen anderen Fehler, RuntimeError: maximale Rekursionstiefe beim Aufruf eines Python-Objekts überschritten, lol, rate ich sollte eine andere Frage für das ... Vielen Dank – NeoVe

Antwort

2

Wenn Sie von einem bereits definierten Modul erben, müssen Sie die Variable _name nicht definieren, sondern nur die Variable _inherit wird ebenfalls funktionieren.

Sie erhielten den Fehler "Modul hat nicht attribute many2one", wie Sie die fields für die neue API importiert haben, aber es die alte API-Art zu definieren. Der maximale Rekursionsfehler sollte ebenfalls gelöst werden, wenn Sie den Code in die neue API schreiben.

Wenn Sie dieses Modul für Odoo 9 schreiben, wäre es eine gute Idee, es in die neue API zu schreiben. Unten ist Ihr Code mit der neuen API geschrieben:

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.') 

Das obige Stück Code sollte ohne Probleme funktionieren.

+1

Dort ist kein Problem bei der Definition von '_name'. Aber deine Antwort ist richtig, sie sollte im neuen api-Stil gemacht werden. – CZoellner

Verwandte Themen