2017-01-27 5 views
0

Я уже делал это, и в старой версии ооо этот способ сработал! Невозможно увидеть этот сигнал «kecske» в файле журнала. Нет сообщения об ошибке. Если я написал код до супер, он не имеет никакого эффекта.Как переопределить field_view_get TransientModel в odoo 10?

Любая идея? Правильно ли это?

class DemoWizard(models.TransientModel): 
    _name = 'demo.wizard' 

    name = fields.Char(string='Name') 

    @api.model 
    def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): 
     log = logging.getLogger('demo.wizard.fields_view_get()') 
     log.debug('kecske') 
     return super(DemoWizard,self).fields_view_get(view_id, view_type, toolbar, submenu) 
+0

Я собираюсь опубликовать пример из исходного кода Odoo10. Я его не тестировал. Он очень близок к тому, что у вас есть. Единственное отличие, которое я вижу, это то, что в вызове Odoo для super() они используют аргументы ключевых слов, а не позиционные аргументы. –

ответ

1

Это источник от Odoo10. Файл находится в дополнении анонимности. odoo/addons/anonymization/wizard/anonymize_wizard.py. Обратите внимание на вызов super() и использование аргументов ключевого слова в соответствии с позиционными аргументами.

Кроме этого ваш код выглядит правильно.

В вашем примере вы инициализировали регистрацию с использованием другой техники. Попробуйте инициализировать ваш регистратор следующим образом.

log = logging.getLogger(__name__) 
log.info("My Log Message") 

или для отладки.

log.debug("My debug message") 

info,debug,warning,error может быть использован для входа различной степени тяжести сообщений журнала.

@api.model 
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): 
    state = self.env['ir.model.fields.anonymization']._get_global_state() 
    step = self.env.context.get('step', 'new_window') 
    res = super(IrModelFieldsAnonymizeWizard, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu) 
    eview = etree.fromstring(res['arch']) 
    placeholder = eview.xpath("group[@name='placeholder1']") 
    if len(placeholder): 
     placeholder = placeholder[0] 
     if step == 'new_window' and state == 'clear': 
      # clicked in the menu and the fields are not anonymized: warn the admin that backuping the db is very important 
      placeholder.addnext(etree.Element('field', {'name': 'msg', 'colspan': '4', 'nolabel': '1'})) 
      placeholder.addnext(etree.Element('newline')) 
      placeholder.addnext(etree.Element('label', {'string': 'Warning'})) 
      eview.remove(placeholder) 
     elif step == 'new_window' and state == 'anonymized': 
      # clicked in the menu and the fields are already anonymized 
      placeholder.addnext(etree.Element('newline')) 
      placeholder.addnext(etree.Element('field', {'name': 'file_import', 'required': "1"})) 
      placeholder.addnext(etree.Element('label', {'string': 'Anonymization file'})) 
      eview.remove(placeholder) 
     elif step == 'just_anonymized': 
      # we just ran the anonymization process, we need the file export field 
      placeholder.addnext(etree.Element('newline')) 
      placeholder.addnext(etree.Element('field', {'name': 'file_export'})) 
      # we need to remove the button: 
      buttons = eview.xpath("button") 
      for button in buttons: 
       eview.remove(button) 
      # and add a message: 
      placeholder.addnext(etree.Element('field', {'name': 'msg', 'colspan': '4', 'nolabel': '1'})) 
      placeholder.addnext(etree.Element('newline')) 
      placeholder.addnext(etree.Element('label', {'string': 'Result'})) 
      # remove the placeholer: 
      eview.remove(placeholder) 
     elif step == 'just_desanonymized': 
      # we just reversed the anonymization process, we don't need any field 
      # we need to remove the button 
      buttons = eview.xpath("button") 
      for button in buttons: 
       eview.remove(button) 
      # and add a message 
      placeholder.addnext(etree.Element('field', {'name': 'msg', 'colspan': '4', 'nolabel': '1'})) 
      placeholder.addnext(etree.Element('newline')) 
      placeholder.addnext(etree.Element('label', {'string': 'Result'})) 
      # remove the placeholer: 
      eview.remove(placeholder) 
     else: 
      raise UserError(_("The database anonymization is currently in an unstable state. Some fields are anonymized," 
           " while some fields are not anonymized. You should try to solve this problem before trying to do anything else.")) 
     res['arch'] = etree.tostring(eview) 
    return res 
+0

К сожалению, это не решает мою проблему. Как я уже сказал, журнал все еще не содержит того, что я пишу перед возвратом. И этот два метода вызова такие же. Но благодарю вас за оказанный вам полезный ответ. –

+1

Что касается вас регистратор. Обычно я вижу логин, инициализированный таким образом. 'log = logging.getLogger (__ name __)' можете попробовать и посмотреть, появится ли ваше ведение журнала? –

+0

Кроме того, в вашем сценарии запуска conf или сервера вы регистрируетесь на уровне отладки? Убедитесь, что вы регистрируетесь на уровне, на котором выводится журнал. Если ваш стартовый скрипт использует 'info', вы должны использовать' log.info ('Hello World') ' –

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