Instead of form.accepts() you can use form.validate() and then do your
own update. Then you do not need to pass unnecessary variables to the
view and back again.

    form = SQLFORM(table, id)
    if form.validate():
        form.vars.mysecretvariable="whatever I want"
        if not form.errors:
            if not id:
                id=table.insert(**dict(form.vars))
                session.flash = "record inserted"
            elif form.vars.get('delete_this_record',False):
                db(table.id==id).delete()
                session.flash = "record deleted"
            else:
                table[id].update_record(**dict(form.vars))
                session.flash = "record updated"

On Nov 2, 3:11 am, Omi Chiba <ochib...@gmail.com> wrote:
> Thank you for understanding me :)
> I tried but this code will set the default value if the field exist on
> the view.
>
> I made a simple example. I don't want to show field2 so it's excluded
> in view using custom form but want to store the value like 'BBB' or
> 'CCC' before it's inserted into table. This code just leave field2
> blank...
>
> model
> ------------------------
> db.define_table('mytable',
>     Field('field1'),
>     Field('field2'))
>
> controller
> ------------------------
> def index():
>     form = SQLFORM(db.mytable)
>
>     form.vars.field2 = 'BBB'
>
>     if form.process().accepted:
>         form.vars.field2 = 'CCC'
>         session.flash = 'form accepted'
>         redirect(URL('index'))
>     elif form.errors:
>         response.flash = 'form has errors'
>     return dict(form=form)
>
> view
> ------------------------
> {{extend 'layout.html'}}
>
> {{=form.custom.begin}}
> Field1: {{=form.custom.widget.field1}}
> {{=form.custom.submit}}
> {{=form.custom.end}}
>
> On Nov 1, 6:58 pm, pbreit <pbreitenb...@gmail.com> wrote:
>
>
>
>
>
>
>
> > I believe in your controller, before form.process() (or form.accepts),
> > include:
>
> > form.vars.FFTSCD = 'aaa'

Reply via email to