2017-01-27 8 views
0

私はすでにそれをやっており、古いオードーバージョンではこの方法が有効です! ログファイルにこの 'kecske'シグナルが表示されます。エラーメッセージは表示されません。もし私がスーパーの前にいくつかのコードを書いたら、それは何の効果もありません。odoo 10のTransientModelのfields_view_getを上書きする方法は?

それは正しい方法ですか?

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

残念ながら、それは私の問題を解決しません。私が言ったように、ログにはまだ返品前に書いたものは含まれていません。 この2つの呼び出し方法は同じです。しかし、あなたの援助の意図的な答えに感謝します。 –

+1

あなたについては、ロガー。通常、このように初期化されたロガーが表示されます。 'log = logging.getLogger(__ name __)'これを試して、あなたのロギングが表示されるかどうか確認できますか? –

+0

また、confまたはサーバーの起動スクリプトで、デバッグレベルでログしていますか?コードがログを出力しているレベルにログオンしていることを確認します。あなたの起動スクリプトが 'info'を使っているなら、' log.info( 'Hello World') ' –

関連する問題