私はフラスコからsqlalchemy.ormの@validatesデコレーターを使用してフィールドを検証してきましたが、すべてのフィールドが次のように互いに独立している限り、すべてうまくいきました。
@validates('field_one')
def validates_field_one(self, key, value):
#field one validation
@validates('field_two')
def validates_field_two(self, key, value):
#field two validation
ただし、ここで、field_oneとfield_twoに同時にアクセスする必要がある検証を行う必要があります。validatesはvalidatesデコレーターに複数の引数を受け入れるように見えますが、次のように、各引数に対して一度だけ検証関数を実行します。
@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
#field validation
結果として、validate field_oneのワークフローが作成され、次にfield_twoが検証されます。ただし、両方を同時に検証したいと思います(その簡単な例は、field_oneの値がfield_twoの値ではないことをアサートすることです。その例は、field_oneとfield_twoのグラフで自己ループを許可しないことです。ノードを参照し、エッジで検証を実行しています)。それを行うための最善の方法は何でしょうか?
モデルで定義された順序でフィールドを並べ替えます。次に、最後のフィールドが検証されているかどうかを確認します。それ以外の場合は、チェックされていない値を返します。バリデーターが以前のフィールドのいずれかを検証している場合、それらのいくつかはまだ設定されません。
@validates('field_one', 'field_two')
def validates_fields(self, key, value):
if key == 'field_two':
assert self.field_one != value
return value
この例を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加