I would personally use a computed field for this:
Model:
def count_words(txt):
...
return count
def get_type(txt):
count = count_words(txt)
if count < 10: return 'small'
if count < 20: return 'medium'
if count < 30: return 'large'
return 'huge'
db.define_table('moment',
Field('textarea','text'),
Field('txttype', readable=False, writable=False,
compute=lambda r: get_type(r['textarea'])),
...
)
Controller:
def submit_moment():
form = crud.create(db.moment)
return dict(form=form)
On Dec 1, 8:09 pm, DenesL <[email protected]> wrote:
> your_model.py:
>
> db.define_table('moment',
> Field('textarea','text'),
> Field('txttype', readable=False, writable=False),
> ...
> )
>
> default.py:
>
> def moment_type(form):
> form.vars.txttype=...
>
> def submit_moment():
> form=SQLFORM(db.moment)
> if form accepts(request.vars, session, onvalidation=moment_type):
> response.flash = 'form accepted'
> elif form.errors:
> ...
> return dict(form=form, ...)
>
> views/default/submit_moment.html:
>
> {{extend 'layout.html'}}
> {{=form}}
>
> On Dec 1, 11:47 am, hswolff <[email protected]> wrote:
>
> > I'll try the model implementation. I need to be able to parse the
> > submit content and count the frequency a word appears and set the type
> > accordingly.
>
> > I'm using response.moment_form because when I had it in the index()
> > function and I would go to the user page it wouldn't render because
> > the dict wouldn't return the form that was displayed on views/
> > layout.html.
>
> > Correct me if I'm wrong: if I were to make a submit_moment():
> > function and a views/default/submit_moment.html view I would be able
> > to include the view on every page and have it be functionally
> > accurate, right?
>
> > I'm still getting the hang of web2py's MVC.
>
>