2015-02-24 41 views
0

我正在嘗試此表單一段時間。我有這顯示一個表單頁面,其DATABSE的定義是這樣的:Web2py:將下拉值限制爲僅登錄用戶

db.define_table('nskrelease', 
      Field('sprid',length=128,requires=IS_IN_SET(['R3.2', 'R3.3', 'R3.4'],zero=T('choose one'),error_message='must be R3.2 or R3.3 or R3.4 '),label = T('SPR')), 
      Field('releaseid',length=128, requires = IS_NOT_EMPTY(error_message='Release ID cant be empty'),label = T('Release')), 
      Field('coordinator',requires=IS_EMAIL(error_message='invalid email!') ,label=T('Co-ordinator Email')), 
      Field('startdate', 'datetime', default=request.now,requires = IS_NOT_EMPTY(error_message='Start date cant be empty'), label=T('Start date')), 
      Field('enddate', 'datetime', default=request.now, requires = IS_NOT_EMPTY(error_message='End date cant be empty'), label=T('End Date')),format='%(%releaseid)s') 

db.nskrelease.releaseid.requires = IS_NOT_IN_DB(db,'nskrelease.releaseid') 
db.nskrelease.coordinator.requires = IS_IN_DB(db,'auth_user.email','%(email)s') 

但這裏的問題是協調字段顯示存在於db.auth_user所有用戶。相反,我需要僅限於登錄用戶。所以,我想:

db.nskrelease.coordinator.requires = IS_IN_DB(db(db.nskrelease.coordinator == 'auth.user.email')) 

但它給我的錯誤:

TypeError: __init__() takes at least 3 arguments (2 given) 

請幫助。提前致謝。

回答

2

如果允許在該領域唯一的電子郵件地址是在當前登錄的用戶,那麼也許只是設置爲默認值,不要使現場寫:

Field('coordinator', writable=False, 
     default=auth.user.email if auth.user else None, 
     update=auth.user.email if auth.user else None) 

然而,更好的方法可能是使這個參考字段,所以你不必擔心更新此字段,只要有一個配置文件更新:

Field('coordinator', 'reference auth_user', writable=False, 
     default=auth.user_id, represent=lambda v, r: v.email) 
+0

謝謝安東尼....這工作.. – May 2015-02-25 12:39:45