web2py防止多对多表中的重复

时间:2016-10-13 07:26:28

标签: duplicates many-to-many web2py data-access-layer

我有一张表来管理多对多的关系(工人和技能) 工人可以拥有多种技能,一种技能可以分配给多个工人

防止重复输入的最佳方法是什么,这样才能将一项技能分配给同一工作人员两次?

谢谢

1 个答案:

答案 0 :(得分:1)

如果你有类似的话:

db.define_table('worker_skill',
    Field('worker', 'reference worker'),
    Field('skill', 'reference skill'))

为了防止通过表单提交重复,您可以在其中一个字段中添加验证器,例如:

db.worker_skill.skill.requires = IS_NOT_IN_DB(
    db(db.worker_skill.worker == request.vars.worker), 'worker_skill.skill'
)

以上将确保插入"技能"在" worker"中插入值的记录集中不存在匹配"工人"字段。

表单验证的另一个选项是使用onvalidation回调,如本书forms chapter中所述。

您还可以直接在数据库中对这对列设置唯一约束(web2py无法处理,因此您必须通过外部工具执行此操作)。这对表单验证没有帮助,因为违反约束只会导致数据库驱动程序抛出异常(而不是向最终用户提供友好的错误消息),但如果您通过方法进行插入将会很有用除了web2py表单。