我有一张表来管理多对多的关系(工人和技能) 工人可以拥有多种技能,一种技能可以分配给多个工人
防止重复输入的最佳方法是什么,这样才能将一项技能分配给同一工作人员两次?
谢谢
答案 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表单。