Actually, you don't need to use SQLFORM at all to take advantage of
validation. Instead, you can do:
db.table.validate_and_insert(...) # to insert new record
or
db(query).validate_and_update(...) # to update an existing record
(Note, the above is not in the book yet.)
Also, if you want to use form.accepts but don't want it to save or check the
unique _formkey in session, then just don't pass session to accepts():
form.accepts(request.vars) # notice no 'session'
Anthony
On Friday, August 19, 2011 8:46:57 AM UTC-4, stoyan wrote:
> Dear fellow w2peers, I would like to make use of the db validators
> through an sqlform, but without having user interaction. Code speaks
> best:
>
> logs = [ ]
> for line in file('my_input_file.txt').readlines():
> name,age = line.split(',')
> form = SQLFORM(db.person)
> request.vars.name = name
> request.vars.age = age
> if form.accepts(request.vars, session,
> onvalidate=validate_person):
> logs.append('record updated')
> elif form.errors:
> logs.append('errors in form')
> else:
> logs.append("I keep ending up here each time I call this
> controller")
> return dict(logs='</br>'.join(logs))
>
>
> I also tried the following and got the same result as above:
> ...
> form.vars.name = name
> form.vars.age = age
> if form.accepts(form.vars, ...
>
> My wild guess is that SQLFORM does not allow this because of security
> concerns: the form's hidden fields do not match the session. Is there
> a way around this?
>
> My requirement is to be able to process the input file and populate/
> update the persons table accordingly while validating the input
> parameters with the table's validators and the form's onvalidate
> method. All of this is done in one go from a single controller.
>
> Any help/recommendations will be greatly appreciated.
>
> Thanks,
> Stoyan.