1

所以我有这个问题,我有 2 个表,例如模板(id,user_id,template_name,reference) user_settings(id,user_id,default_template)

因此每个用户都可以创建许多模板,并且在他的设置中他可以选择一个他将始终使用的默认模板

所以现在有很多用户,所以当用户想要选择默认模板时,他可以看到所有模板(他自己的模板和其他用户的模板)

表是这样定义的:

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')),
...
...
)

我应该怎么做才能让用户只选择他自己的模板!

4

1 回答 1

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')

有关数据库验证器的更多信息,请参见此处

于 2011-07-29T21:25:10.293 回答