2011-07-29 88 views
1

所以我這個問題 我已經例如 模板(ID,USER_ID,TEMPLATE_NAME,參考) user_settings(ID,USER_ID,default_template)web2py中,數據庫關係和權限

因此每個用戶2個表可以創建很多模板,在他的設置中,他可以選擇一個默認模板,他將始終使用

所以現在有很多用戶,所以當用戶想要選擇默認模板時,他可以看到所有模板(他自己的模板和其他用戶的模板)

代表這樣定義:

db.define_table('i2l_templates', 
    Field('id','id', 
      represent=lambda id:SPAN(A('view',_href=URL('view_template',args=id)),' | ', 
              A('edit',_href=URL('edit_template',args=id)))), 
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False, 
      label=T('User Id')), 
    Field('template_name', requires=IS_NOT_EMPTY(), type='string', 
      label=T('Template name')), 
... 
... 
... 
) 

db.define_table('user_settings', 
    Field('id','id', 
      represent=lambda id:SPAN(A('view',_href=URL('view_settings',args=id)))), 
    Field('user_id', db.auth_user, default=auth.user_id, writable=False,readable=False, 
      label=T('User Id')), 
    Field('standard_template_id', templates, 
      label=T('Standard Template')), 
... 
... 
) 

我應該怎麼做才能讓用戶只選擇自己的模板!

回答

0

首先,並不是

Field('standard_template_id', templates, 

應該

Field('standard_template_id', db.i2l_templates, 

對於基準場,默認表單驗證是IS_IN_DB(db,'<table>.id'),這將選擇在引用表中的所有記錄。但是,您可以覆蓋默認的驗證和指定的記錄的子集:

requires = IS_IN_DB(db(db.i2l_templates.id==auth.user_id), 
        'i2l_templates.id', '%(template_name)s') 

更多關於數據庫校驗見here