feature. not a bug. "required" is not a form directive but a DAL directive. Tells the DAL not to accept inserts if the field is missing.
On Wednesday, 6 January 2016 10:58:04 UTC-6, Scott Hunter wrote: > > I've solved 1/2 of the problem: as per the documentation, `required` only > applies to DB access; instead, I needed to supply appropriate validators > via the `requires` parameter. > > That still leaves the exception; I can understand it being an odd > situation (validation against the DB when no DB IO is requested), and I > don't get the exception once the appropriate `requires` parameter is > supplied, but it doesn't seem like this should be raising an exception. > > On Sunday, January 3, 2016 at 9:46:34 PM UTC-5, Scott Hunter wrote: >> >> If I create a SQLFORM from a table, but avoid DBIO (either by just >> calling validate, or calling process(dbio=False).accepted), if a required >> field is missing, instead of the form coming back w/ errors, It throws a >> NOT_IN_DB exception. >> >> def request_trial(): >> form = SQLFORM(db.t_trial) >> if form.process(dbio=False).accepted: >> session.flash = "Trial Requested" >> redirect( URL(f="index", user_signature=True) ) >> return locals() >> >> >> >> Here's the traceback: >> >> Traceback (most recent call last): >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/restricted.py", >> line 227, in restricted >> exec ccode in environment >> File >> "/Users/scott_mbp/Dropbox/web2py_uki/applications/init_bkup/controllers/default.py" >> , line 494, in <module> >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/globals.py", line >> 412, in <lambda> >> self._caller = lambda f: f() >> File >> "/Users/scott_mbp/Dropbox/web2py_uki/applications/init_bkup/controllers/default.py" >> , line 480, in request_trial >> if form.process(dbio=False).accepted: >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 2304 >> , in process >> self.validate(**kwargs) >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 2241 >> , in validate >> if self.accepts(**kwargs): >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/sqlhtml.py", line >> 1505, in accepts >> **kwargs >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 2122 >> , in accepts >> status = self._traverse(status, hideerror) >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 888, >> in _traverse >> newstatus = c._traverse(status, hideerror) and newstatus >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 888, >> in _traverse >> newstatus = c._traverse(status, hideerror) and newstatus >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 888, >> in _traverse >> newstatus = c._traverse(status, hideerror) and newstatus >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 888, >> in _traverse >> newstatus = c._traverse(status, hideerror) and newstatus >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 895, >> in _traverse >> newstatus = self._validate() >> File "/Users/scott_mbp/Dropbox/web2py_uki/gluon/html.py", line 1863 >> , in _validate >> raise Exception(msg) >> Exception: Validation error, field:f_UKI_ID >> <gluon.validators.IS_NOT_IN_DB >> object at 0x10e6bfa10> >> >> >> ... and the definition of the field in question: >> >> Field( 'f_UKI_ID', 'integer', label="UKI ID", unique=True, required= >> True ), >> >> >> >> (This may be due to the field also being required to be unique; when >> unique is not required of any empty fields, I get the behavior described >> below.) >> >> If instead I use a SQLFORM.factory, missing required fields pass >> validation; here is the new definition of `form`: >> >> form = SQLFORM.factory( Field( 'Name', label="Name", required=True ) >> ) >> >> >> >> Has this always been the behavior? If so, can someone explain the >> rationale behind it? >> >> This is using Version 2.13.4-stable+timestamp.2015.12.26.04.59.39 >> >> - Scott Hunter >> > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

