2017-07-06 11 views
2

私はフォームでSQL Constraintを作成しましたが、何か間違って入力すると制約エラーが発生しますが、Formはまだ保存されません。この形式のシーケンスのインクリメント。私がシーケンスを作成することを知っているのは、from関数がsuper関数によって保存されたときから作成されることだけです。SequenceをインクリメントせずにSQL Constraint Validationを実行しました。

シーケンスをインクリメントせずにConstraintの検証を行う方法はありますか?

この私のシーケンスコード

@api.model 
def create(self, vals): 
    if vals.get('name','/')=='/':  
     sequence = self.env['ir.sequence'].next_by_code('archive.dossier') 
     vals['name'] = sequence 
    return super(oeArchiveDossier, self).create(vals) 

答えて

1

odooで使用される配列の2つのタイプ(実装)があります。あなたは(それのデフォルト)その後、シーケンスはPostgreSQLで作成され、PostgreSQLで管理される順序でこの実装タイプを選択した場合は

  • 標準
  • 隙間なく

標準

。そのような制御はありません。したがって、トランザクションが失敗した場合、シーケンス(次の番号)はロールバックされません。

隙間なく

あなたは、この実装タイプを選択した場合はすべての問題がある場合ので、それはその後、シーケンス番号はスキップされません、odooによって管理されます。

enter image description here

より良い制約する方法を設定するにはodoo内のオプションがあるの検証を制御するには。

@api.constrains('field1', 'field2') 
def check_validations(self): 
     ## Perform Validation 
     ## If condition not satisfied then raise an error. 
     if validation_conditions: 
      ## Raise an error 
関連する問題