基于填充数据库表的当前经过身份验证的用户创建web2py表单

时间:2017-01-08 23:24:16

标签: web2py

我有一个引用web2py提供的数据库表 auth_user表:

db.define_table('t_user_business',
    Field('f_user_id', type='reference auth_user',
          label=T('User Id')),
    Field('f_name', type='string',
          label=T('Name')),
    Field('f_link', type='string',
          label=T('Link')),
    Field('f_importance', type='integer',
          label=T('Importance')),
    auth.signature,
    format='%(f_user_id)s',
    migrate=settings.migrate)

我想设计一个页面,其中包含列出所有内容的表单 此表中的当前条目用于经过身份验证 用户。例如。

的内容
db.t_user_business.f_user_id==3

3替换为当前的auth_user.id值 登录用户。

此外,在同一页面上,我希望有一个允许用户使用的表单 输入此表的新记录,并在提交后提交此记录 验证记录到数据库。

1 个答案:

答案 0 :(得分:0)

当用户登录时,用户ID的值在auth.user_id,因此您可以使用它来设置f_user_id字段的默认值:

Field('f_user_id', type='reference auth_user',
      default=auth.user_id, # Will be None if no logged in user.
      readable=False, writable=False, label=T('User Id'))

使用上述默认值,每当为此表提交SQLFORM表单时,f_user_id的值将自动设置为当前登录用户的ID。

注意,readablewritable属性设置为False,因此此字段不会显示在表单中。它也不会出现在网格中,但您可以在定义网格之前更改readable属性来更改它:

db.t_user_business.f_user_id.readable = True

要在此表中显示与当前用户关联的记录网格(没有任何查看/编辑/删除按钮),您可以执行以下操作:

grid = SQLFORM.grid(db.t_user_business.f_user_id == auth.user_id,
                    deletable=False, editable=False, details=False)