2015-10-21 94 views
0

我想下表定义与非相同的域值作为跟随者不应该遵循自己:的web2py:非同一领域约束

db.define_table('followers', 
    Field('follower', 
      db.auth_user, 
      requires=(db.subscription.follower != db.subscription.user)), 
    Field('user', 
      db.auth_user, 
      requires=(db.subscription.follower != db.subscription.user)) 
) 

但我不知道如何实现它。任何提示?

谢谢

回答

1

假设刀片将通过表单处理发生:

db.define_table('followers', 
    Field('follower', 'reference auth_user', 
      requires=IS_IN_DB(db(db.auth_user.id != request.post_vars.user), 
          'auth_user.id', db.auth_user._format)), 
    Field('user', 'reference auth_user')) 

这将允许在user领域的任何auth_user ID,但会限制follower领域的ID比提交的另一个request.post_vars.user。当没有表格提交时,request.post_vars.user将仅仅是None,这并不重要,因为验证器仅在表单提交时使用。

或者,您可以在处理表单时使用onvalidation回调函数。

+0

我正在寻找一个数据库验证器,但您的解决方案更有意义,因为这是一个用户请求功能。非常感谢 ! –

+0

这两个字段仍然使用'IS_IN_DB'数据库验证器(默认情况下,添加'user'字段的验证器,因为它是引用字段)。但是,只需要将其中的一个限制为'auth_user'记录的子集。 – Anthony