0

モデルにいくつかの選択フィールドがあります。ここに例:

class MyModel(models.Model):
    _name = 'my_app.my_model'

    example_selection = fields.Selection(
        [
             ('first', 'First'),
             ('second', 'Second'),
             # etc.
        ], 
        string='My selection', 
    )

場合によっては、選択 (またはラジオ ボタン) で特定のオプションを非表示にする必要があります。どうすればこれを適切に行うことができますか?

私の問題について詳しく説明できるベースカレンダーモジュールの画面の下。

ここに画像の説明を入力

前もって感謝します。

4

3 に答える 3

1

解決策を見つけました。

まず、FieldSelectionのカスタム ウィジェットを作成する必要があります。ここに例( path_to_your_module/static/src/js/form_widgets.js ):

odoo.define('your_module.form_widgets', function (require) {
"use strict";

var core = require('web.core');
var FieldSelection = core.form_widget_registry.get('selection');

var MySelection = FieldSelection.extend({
    // add events to base events of FieldSelection
    events: _.defaults({
        // we will change of visibility on focus of field
        'focus select': 'onFocus'
    }, FieldSelection.prototype.events),
    onFocus: function() {
      if (
          // check values of fields. for example I need to check many fields
          this.field_manager.fields.name_field_1.get_value() == 'value1' &&
          this.field_manager.fields.name_field_2.get_value() == 'value2' /* && etc fields...*/   
      ) {
          // for example just hide all options. You can create any kind of logic here
          this.$el.find('option').hide();
      } 
    }
});

// register your widget
core.form_widget_registry.add('your_selection', MySelection);
});

この後、次のようにウィジェットをビューのフィールドに設定するだけです:

<field name="example_selection" widget="your_selection"/>

モジュールのstaticを含める方法がわからない場合は、こちらの例が役立ちます

これが誰かに役立つことを願っています;)

于 2016-02-19T23:47:17.423 に答える
0

私の知る限り、これは不可能ですが、使用できるビューで選択の代わりに MAny2one を使用すると (ドメインを使用して)、同様のことを達成できます。

<field name="example_with_domain" widget="selection"/>

選択フィールドと同じ視覚的動作 (作成なし、編集なし) を取得します。

于 2016-01-28T08:35:25.547 に答える