OpenERP ユーザーは、コア OpenERP モジュールのフィールドに小さな変更を加えたいと思うことがあります。たとえば、製品画面の Rack、Row、および Case フィールドを 16 文字より長くしたいと考えています。
宣言したモジュールを変更せずに、既存のフィールドを変更できますか? product
モジュール自体を編集するのではなく、独自のカスタム モジュールを使用して変更を加えたいと思います。
私はこれを機能させましたが、他の誰かがよりクリーンな方法を知っていることを願っています。
カスタム モジュールでコア モジュールのクラスを継承し、変更するフィールドと同じ名前の新しいフィールドを宣言するだけです。基本的に、コア モジュールからフィールド宣言をコピーし、それをカスタム モジュールに貼り付けてから、必要な変更を加えます。たとえば、このproduct_notes
モジュールでは、Rack、Row、および Case フィールドがモジュールの 16 から 255 に拡大されproduct
ました。
_columns = {'loc_rack': fields.char('Rack', size=255),
'loc_row': fields.char('Row', size=255),
'loc_case': fields.char('Case', size=255)}
これが気に入らない理由は、フィールドの他のすべての属性が重複しているためです。フィールドの長さを変更すると、コア モジュールがヘルプ テキストを変更しても、古いヘルプ テキストが表示されたままになります。モジュールが読み込まれているときに親のフィールド属性を調整する方法があることを期待していましたが、適切なタイミングでフックが見つかりませんでした。
より簡単に行える変更の 1 つは、フィールドのデフォルト値です。カスタム モジュールでコア モジュールのフィールドのデフォルト値を宣言するだけで、元のデフォルトが置き換えられます。たとえば、モジュール内のデフォルトsale_delay
とproduce_delay
デフォルトを変更しました。product
_defaults = {'sale_delay': lambda *a: 5,
'produce_delay': lambda *a: 0}