2015-10-21 93 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