Вы имеете в виду некоторые поля, видимые для всех посетителей, а некоторые поля видны только при входе в систему?
Если это так, тогда создайте свою форму условно:
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))
Если вы не говорите о зарегистрированных пользователях, а просто хотите, чтобы поля были видимыми, но не редактируемыми. Затем используйте writeable = False, как вы пытались, но я думаю, что вы должны либо использовать crud.create / crud.update, либо SQLFORM / SQLFORM.factory (последний не требует модели данных)
SQLFORM.factory(Field('my_readable_field', writable=False))
Если форма основана на базе данных, вы можете использовать CRUD (вам нужно изменить настройки CRUD, если вы не используете аутентификацию, чтобы формы CRUD были доступны)
crud.create(db.some_table)
или
SQLFORM(db.some_table)