On Saturday 28 August 2010 7:51:59 am Kevin wrote:
> I think what you are looking for is the Field's compute argument.
> Check out compute and update arguments for the field constructor,
> compared to what the default argument does.
No not really. I wanted what Dr. DiPierro came up with, a way of passing a
database variable (CURRENT_DATE) to the DEFAULT clause of the field. This lets
the database do the work and reduces the duplication of effort on the client
side.
>
> I would get confused by this as well -- web2py does it the best way
> and does it consistently, but when getting into I might have expected
> default to do some magic based on whether the argument were callable
> or not.
Let me say I am impressed with Web2py and it has allowed to go further faster
then any other framework I have looked at. In this particular case though I
think I ran across a split personality problem. To illustrate in Field() you
have a length argument that puts a length constraint at the database level i.e
the actual field definition (CHAR(10)). At the form level you also have
IS_LENGTH which is used by SQLFORM to perform basically the same function. The
default argument however performs both duties and that presents a bit of a
problem. In fact I spoke too soon earlier about the fix working. The fix
allowed me to properly set the DEFAULT clause, but SQLFORM is having problems
understanding what to do with the Expression. See here:
Traceback (most recent call last):
File "/home/aklaver/software_projects/w2py/web2py/gluon/restricted.py", line
188, in restricted
exec ccode in environment
File
"/home/aklaver/software_projects/w2py/web2py/applications/hplc/controllers/appadmin.py",
line 410, in <module>
File "/home/aklaver/software_projects/w2py/web2py/gluon/globals.py", line 96,
in <lambda>
self._caller = lambda f: f()
File
"/home/aklaver/software_projects/w2py/web2py/applications/hplc/controllers/appadmin.py",
line 124, in insert
form = SQLFORM(db[table], ignore_rw=ignore_rw)
File "/home/aklaver/software_projects/w2py/web2py/gluon/sqlhtml.py", line
694,
in __init__
default = field.formatter(default)
File "/home/aklaver/software_projects/w2py/web2py/gluon/sql.py", line 2869,
in
formatter
value = item.formatter(value)
File "/home/aklaver/software_projects/w2py/web2py/gluon/validators.py", line
2023, in formatter
year = value.year
AttributeError: 'Expression' object has no attribute 'year'
>
> So perhaps this should go in the FAQ.
>
--
Adrian Klaver
[email protected]