This should do it.
form = SQLFORM.factory( Field('test',default='abc'), Field('best',default='123'), readonly=True ) On Nov 3, 2:17 am, pepper_bg <ilief...@gmail.com> wrote: > I have some functionality which generates a custom SQLFORM.factory > form (reads/writes to different tables, handles uploads, etc.). All > works fine but somewhere down the flow I just wanted to display that > same form prefilled and readonly. For whatever reason I can't prefill > it and make it readonly at the same time. > > Let me illustrate with some code (not my exact code, just generic > web2py code which does the same): > > I though to display a generic, readonly, prefilled form I should do > this: > def frm(): > form = SQLFORM.factory( Field('test'), Field('best'), > readonly=True ) > form.vars = dict( test='abc', best='123' ) > return dict(form=form) > > the form shows but instead of the default values it shows None. > > To show the default values I had to do this (remove readonly and add > form.accepts (which for a readony form seems strange, I would never > read from this form here)): > def frm(): > form = SQLFORM.factory( Field('test'), Field('best') ) > form.vars = dict( test='abc', best='123' ) > form.accepts(request.vars, session) > return dict(form=form) > > so far so good by form ain't readonly. > > When I try to add the readonly back I get a readonly form but again > with all values set to None: > def frm(): > form = SQLFORM.factory( Field('test'), Field('best'), > readonly=True ) > form.vars = dict( test='abc', best='123' ) > form.accepts(request.vars, session) > return dict(form=form) > > I must be missing something fundamental here. I could display that > same information other ways I guess but I already have the code which > builds it in a form I thought I could reuse. Thanks for looking into > this...