2016-10-13 3 views
0

次の表を考えてみてください。web2pyのフィールドの値が別のフィールドに依存 - (モデルを定義しながら、検証)

db.define_table('bio_data', 
      Field('name', 'string'), 
      Field('total_mark', 'integer', requires=IS_EMPTY_OR(IS_INT_IN_RANGE(0, 1e100))), 
      Field('marks_obtained', 'integer') 
      ) 

今「marks_obtained」フィールドは「total_marks」より大きな値を持つことができません。

私は、次の

db.bio_data.marks_obtained.requires = IS_EMPTY_OR(
IS_INT_IN_RANGE(0, db.bio_data.total_mark)) 

を試してみましたが、しかし、これは動作しません。次のエラーが表示されます。

TypeError: int() argument must be a string or a number, not 'Field' 

何か助けてください。

+0

「フィールド」の整数値を取得する方法を見つける。 –

+0

はい、ここでの質問ですが、フィールドの代わりにどのように値を取得できますか?私は以下を試しましたが、まだエラーが発生しました: 'フィールド '' marks_obtained '、'整数 '​​、 は=ラムダ行が必要です:IS_EMPTY_OR(IS_INT_IN_RANGE(0、db.bio_data(row.id).total_mark)))' 完全な問題や知識を理解することなく、ダウンボートしないようにお願いします。 –

+0

'dir(db.bio_data.total_mark)'とタイプして、それが返すものを見ることができますか? 'int(db.bio_data.total_mark)' –

答えて

1

onvalidationコールバック機能を使用すると簡単に実行できます。この Form and validators - onvalidation

を読む第二ソリューションあなたはとIS_EXPRバリ「依存関係でバリ」を組み合わせる必要があります。読む:

  1. Validators with dependencies

  2. IS_EXPR

コントローラで次のような何かをバリデータを追加し、私はこれをテストしていませんが、あなたはここからアイデアを得るでしょう。

is_total_less = int(request.vars.marks_obtained) < int(request.vars.total_mark) 

db.bio_data.marks_obtained.requires = IS_EMPTY_OR(
IS_EXPR('%s' % is_total_less, 
     error_message='Marks Obtained should be smaller than Totak Marks')) 

request.varsが利用可能であることを確認してください。

+1

私は 'onvalidation'コールバックを使ってそれを行うことができました。モデルレベルでは、私も同じことを試み、更新します。更新していただきありがとうございます。 –

関連する問題