2016-02-16 3 views
0

Я пытаюсь изменить значение по умолчанию для поля модели наследования. Модель, которую я пытаюсь изменить это account.invoice так:Модели Odoo наследуют изменение модели по умолчанию

class account_invoice(models.Model): 
    _inherit = 'account.invoice' 

    defaults = { 
     'journal_id': None, 
    } 

причина заключается в том, что клиент имеет несколько журналов и боится, что некоторые сотрудника забудьте изменить на правильный журнал. Мне нужно, чтобы выбрать его вручную

EDIT: Я использую этот код, но _default_currency не переопределяют

from openerp import fields, models, osv, api, _ 
from openerp.osv import osv,fields as Fields 


TYPE2JOURNAL = { 
    'out_invoice': 'sale', 
    'in_invoice': 'purchase', 
    'out_refund': 'sale_refund', 
    'in_refund': 'purchase_refund', 
} 

class account_invoice(models.Model): 
    _inherit = 'account.invoice' 

    @api.model 
    def _default_journal(self):   
     return None 

    @api.model 
    def _default_currency(self): 
     inv_type = self._context.get('type', 'out_invoice') 
     inv_types = inv_type if isinstance(inv_type, list) else [inv_type] 
     company_id = self._context.get('company_id', self.env.user.company_id.id) 
     domain = [ 
      ('type', 'in', filter(None, map(TYPE2JOURNAL.get, inv_types))), 
      ('company_id', '=', company_id), 
     ]   
     journal = self.env['account.journal'].search(domain, limit=1) 
     return journal.currency or journal.company_id.currency_id 

ответ

0

по умолчанию на оригинальном ру определяется как функция называется _default_journal

@api.model 
def _default_journal(self): 
    inv_type = self._context.get('type', 'out_invoice') 
    inv_types = inv_type if isinstance(inv_type, list) else [inv_type] 
    company_id = self._context.get('company_id', self.env.user.company_id.id) 
    domain = [ 
     ('type', 'in', filter(None, map(TYPE2JOURNAL.get, inv_types))), 
     ('company_id', '=', company_id), 
    ] 
    return self.env['account.journal'].search(domain, limit=1) 

просто переопределите его и поставьте «None» в обратном направлении.

В противном случае, вы можете повторно определить поле:

journal_id = fields.Many2one('account.journal', string='Journal', 
    required=True, readonly=True, states={'draft': [('readonly', False)]}, 
    default=_default_journal, 
    domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale_refund'], 'in_refund': ['purchase_refund'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]") 

просто скопировать то же самое и удалить строку с по умолчанию.

уход Примите, если вы делаете первое решение, поскольку валюта по умолчанию берется из журнала по умолчанию:

@api.model 
def _default_currency(self): 
    journal = self._default_journal() 
    return journal.currency or journal.company_id.currency_id 

быть уверены, чтобы переопределить эту функцию Aswell разбора кода журнала по умолчанию, чтобы получить валюту, необходимость.

+0

Я успешно переопределяю def _default_journal, чтобы возвращать None, но когда я пытаюсь сделать это для def _default_currency, функция является вызовом из исходной модели, я получаю ошибку в модели account_invoice с пути odoo. –

+0

Хотите показать мне код? убедитесь, что зависимости в __openerp__.py определены как модель, которую вы наследуете. Кроме того, убедитесь, что это единственный модуль, переопределяющий его. В любом случае, попробуйте позвонить в супер, чтобы вы не нарушили целостность, просто измените значение возврата. – dccdany

+0

Я добавляю код, редактирующий сообщение оригинала, для отладки. Я добавляю печать в первой строке def _default_currency, но никогда не печатаю, поэтому функция никогда не вызывается, кроме того, я получаю объект nonetype, не имеет .currency в оригиналах odoo account_invoice .py file –