Forms Web2py表单字段选项

Forms Web2py表单字段选项,forms,field,web2py,readonly,Forms,Field,Web2py,Readonly,我使用的是web2py表单,我希望有一些字段只对用户可见(已修复,无法编辑)。我尝试了各种可编辑、可写、只读的组合,但都没有用。我也看过web2py的书,但这似乎还不够。如果有人能告诉我怎么做,那就太好了。你是说有些字段对所有访问者都可见,有些字段只有在登录后才可见 如果是这种情况,则有条件地构建表单: form_fields = [ Field('pubfield'), Field('pubfield2') ] if auth.user: # This is true if the

我使用的是web2py表单,我希望有一些字段只对用户可见(已修复,无法编辑)。我尝试了各种可编辑、可写、只读的组合,但都没有用。我也看过web2py的书,但这似乎还不够。如果有人能告诉我怎么做,那就太好了。

你是说有些字段对所有访问者都可见,有些字段只有在登录后才可见

如果是这种情况,则有条件地构建表单:

form_fields = [
  Field('pubfield'),
  Field('pubfield2')
]

if auth.user: # This is true if the end-user is logged in and you're using the built-in auth
  form_fields.append(Field('private_field'))

return dict(form=FORM(form_fields))
除非您不是在谈论登录用户,只是想使字段可见,但不可编辑。然后,像您尝试的那样使用writable=False,但我认为您必须使用crud.create/crud.update或SQLFORM/SQLFORM.factory(后者不需要数据模型)

如果表单基于数据库,则可以使用CRUD(如果不使用身份验证,则需要修改CRUD的设置,以便可以访问CRUD表单)


你能展示你的代码吗?如果您使用的是基于db表的SQLFORM或Crud表单,那么您应该能够将db.tablename.fieldname.writeable设置为False(尽管您必须在创建表单之前的某个时候这样做)。如果您正在使用FORM helper或只是在HTML中手动创建表单,那么您可以将“readonly”属性添加到输入标记(尽管这可能会被攻击者攻击),或者只显示输入标记之外的值。
SQLFORM.factory(Field('my_readable_field', writable=False))
crud.create(db.some_table)
SQLFORM(db.some_table)