【问题标题】:Web2py conditionally readable fieldWeb2py 条件可读字段
【发布时间】:2025-12-27 17:55:11
【问题描述】:

web2py 的完整新手...我想让表单底部的复选框仅在用户是管理员用户时有条件地显示。如果非管理员用户看不到它,我如何解决字段名称以便我可以更改?

我正在使用 for 循环来引用一个循环变量,不确定我是否需要它...

## create all tables needed by Technical Request Form
db.define_table('technical_request',
Field('uuid', 'string', default=uuid.uuid4(), readable=False, writable=False),
Field('firstname', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'), label="First Name"),
Field('lastname', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'), label="Last Name"),
Field('phone', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'), label="Phone Number"),
Field('email', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'), label="Email"),    
Field('issue_name', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'),label="Subject"),
Field('about_issue', 'text', requires=IS_NOT_EMPTY(error_message='All Fields are Required!'), label="Description of issue "),
Field('issue', 'upload', label="Attach Files "),
Field('request_processed', 'boolean', default=False, readable = False),
auth.signature)

for field in db.technical_request:
  if field.name == 'request_processed' and auth.has_group_membership("systemadmin"):
    field.readable = True

这是我要隐藏的复选框....

  • 跟进问题 *

有没有办法可以有条件地添加字段?

【问题讨论】:

    标签: field web2py


    【解决方案1】:

    无需循环——您可以直接通过其名称访问该字段:

    db.technical_request.request_processed.readable = auth.has_group_membership("systemadmin")
    

    或者只是在定义字段时这样做:

    Field('request_processed', 'boolean', default=False,
          readable=auth.has_group_membership("systemadmin"))
    

    【讨论】:

    • 我已经尝试过这种方法,但它似乎不起作用。有没有办法有条件地添加字段?在 C 语言中,我可以有一个预处理指令 #ifdef 来跳转代码的某些部分...
    • 我也尝试将可读属性硬编码为False,但它仍然出现:|
    • 我猜你正在使用内置的appadmin 功能,它忽略了readablewritable 属性(如admin 应用程序,它仅适用于具有完整系统控制)。否则,一定有问题是您没有显示一些代码。您可以考虑使用this functionality