我有这个表单是从 SQLFORM 方法构建的,
flow_step_forms[step.name] = SQLFORM(db.approval_flows_progress_steps,
record=thisstep.id if thisstep is not None else None,
readonly=not __userCanPerformStep(step) or flow_completed)
approval_flows_progress_steps 的数据库如下
db.define_table('approval_flows_progress_steps',
Field('flow_progress', 'reference approval_flows_progress'),
Field('flow_step', 'reference approval_flows_steps'),
Field('completed', 'boolean'),
Field('completed_on', 'datetime'),
Field('completed_by', 'reference auth_user'),
Field('notes', 'text', writable = True),
auth.signature
)
字段 notes 会呈现为文本框。
在我分配SQLFORM后,有这样的代码:
if __userCanPerformStep(step) and not flow_completed:
flow_step_forms[step.name].element('textarea')['_rows'] = 5
我想我可以像here一样引用数据库的属性,但是我收到以下错误: 'NoneType'对象没有属性'可写'
问:如何为某些用户有条件地启用文本框?
答案 0 :(得分:0)
我不确定你为什么会得到一个NoneType。但是为了使textarea只读,你可以这样做:
if __userCanPerformStep(step) and not flow_completed:
flow_step_forms[step.name].element('textarea')['_readonly'] = True
else:
flow_step_forms[step.name].element('textarea')['_readonly'] = False
如果您的NoneType问题仅在未授权用户时发生。您可以使用Try / Except块捕获它。说除了NoneType:_readonly = True。