stock.move
モデルのunlink
メソッドを上書きしたいと思います。その理由は、禁止されたアクションについて警告するOSV例外を取り除き、それを他のメッセージおよび他の状態に置き換えるためです。カスタムモジュールからORMメソッドのリンクを上書きする方法は?
これは元のコードです:
def unlink(self, cr, uid, ids, context=None):
context = context or {}
for move in self.browse(cr, uid, ids, context=context):
if move.state not in ('draft', 'cancel'):
raise osv.except_osv(_('User Error!'), _('You can only delete draft moves.'))
return super(stock_move, self).unlink(cr, uid, ids, context=context)
私はちょうどそのメッセージを削除すると、私は思ったよりcomplexerであることを実現しています。
class StockMove(models.Model):
_inherit = 'stock.move'
@api.multi
def unlink(self):
for move in self:
if move.lot_id and move.lot_id.any_unit_sold is True:
raise Warning(_('You can only delete unsold moves.'))
return super(StockMove, self).unlink()
私はself.unlink()
への最後の行を(super
)有効にした場合、私は超え最大再帰の深さを得る:これは私の状態をチェックしている私の現在のコードですが、その後、私は避けたいオリジナルのものをチェックしますエラー。
カスタムモジュールから目的を管理するにはどうすればよいですか?
super()呼び出しを使用しないと予期しない動作が発生することがあります。 models.Model.unlink()を呼び出すことができますが、これは 'stock.move'のすべてのunlink()拡張をスキップします。もう一つの可能性は、元のコードにサルのパッチがあることです。 – CZoellner
私はむしろ 'super'を無視したくないですが、私はこの場合、元のコードのサルパッチよりも優れていると思います。最後に私は 'models.Model.unlink(self)'を使いました。ありがとう@CZoellner! – forvas