0

次のようにテーブルを定義しました。

db.define_table('special_users',
    Field('sp_user', db.auth_user, required=True, notnull=True, label='Special User', represent=lambda lead,row: lead.first_name + ' ' + lead.last_name, unique=True),
    format=lambda row: (row.lead.first_name + ' ' + row.lead.last_name) or 'N/A')

そして、次のようにrequires制約を指定しました

db.special_users.lead.requires = IS_IN_DB(db, db.auth_user, '%(first_name)s %(last_name)s', zero=None)

ここで、テーブルを使用してフォームを生成するとSQLFORM(db.special_users)、ユーザーを何度でも追加できますが、これはunique=True制約違反です。どうすればこれを修正できますか?

4

1 に答える 1

0

何らかの理由で、notnull と一意の制約が参照フィールドに適用されない可能性があると思います。いずれにせよ、挿入が一般的にフォームを介して行われる場合はIS_NOT_IN_DB()、フィールドでバリデーターを使用することをお勧めします。これにより、フォームの処理時に適切なエラー処理と表示が可能になります。のみに依存unique=Trueすると、重複挿入の試行時に例外が発生し、エンド ユーザーに対して非特定の 500 サーバー エラーが生成されます。

于 2012-12-06T21:13:36.480 に答える