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...

Reply via email to